From eb8daf81f9ddd2c72d0eccd6a6611765f754b9ac Mon Sep 17 00:00:00 2001 From: Documentation Builder Date: Wed, 19 Jun 2024 13:25:31 +0200 Subject: [PATCH] Automated documentation build for changeset 29d916f57d10b89af51663abd7c1662674e1e737. --- FixBothRanges.png | Bin 34806 -> 0 bytes _a_zh_systematics_8cc.html | 19 +- _a_zh_systematics_8cc_source.html | 55 +- _algorithm_8h.html | 19 +- _algorithm_8h_source.html | 33 +- _auto_rebin_8cc.html | 19 +- _auto_rebin_8cc_source.html | 37 +- _auto_rebin_8h.html | 19 +- _auto_rebin_8h_source.html | 39 +- ...del_independent-_limits-_hhh_a_zh_8md.html | 19 +- ...ndependent-_limits-_m_s_s_m_h_t_t_8md.html | 19 +- _bin_by_bin_8cc.html | 19 +- _bin_by_bin_8cc_source.html | 96 +- _bin_by_bin_8h.html | 19 +- _bin_by_bin_8h_source.html | 57 +- _c_m_s_hist_func_factory_8cc.html | 19 +- _c_m_s_hist_func_factory_8cc_source.html | 96 +- _c_m_s_hist_func_factory_8h.html | 19 +- _c_m_s_hist_func_factory_8h_source.html | 39 +- _card_writer_8cc.html | 19 +- _card_writer_8cc_source.html | 63 +- _card_writer_8h.html | 19 +- _card_writer_8h_source.html | 37 +- _charged_higgs_8md.html | 19 +- _combine_harvester_8cc.html | 19 +- _combine_harvester_8cc_source.html | 903 ++-- _combine_harvester_8h.html | 19 +- _combine_harvester_8h_source.html | 588 +-- _combine_harvester___creation_8cc.html | 19 +- _combine_harvester___creation_8cc_source.html | 383 +- _combine_harvester___datacards_8cc.html | 20 +- ...bine_harvester___datacards_8cc_source.html | 2869 ++++++------- _combine_harvester___evaluate_8cc.html | 19 +- _combine_harvester___evaluate_8cc_source.html | 1461 +++---- _combine_harvester___filters_8cc.html | 19 +- _combine_harvester___filters_8cc_source.html | 115 +- _combine_pdfs_2src_2classes_8h.html | 19 +- _combine_pdfs_2src_2classes_8h_source.html | 23 +- _combine_tools_2src_2classes_8h.html | 19 +- _combine_tools_2src_2classes_8h_source.html | 33 +- _copy_tools_8cc.html | 19 +- _copy_tools_8cc_source.html | 45 +- _copy_tools_8h.html | 19 +- _copy_tools_8h_source.html | 53 +- _example1_8md.html | 19 +- _example2_8md.html | 19 +- _example3_8md.html | 19 +- _hhh_systematics_8cc.html | 19 +- _hhh_systematics_8cc_source.html | 57 +- _hist_mapping_8cc.html | 19 +- _hist_mapping_8cc_source.html | 49 +- _hist_mapping_8h.html | 19 +- _hist_mapping_8h_source.html | 49 +- _htt_systematics_8h.html | 19 +- _htt_systematics_8h_source.html | 39 +- _htt_systematics___m_s_s_m_legacy_8cc.html | 19 +- ...stematics___m_s_s_m_legacy_8cc_source.html | 53 +- _htt_systematics___m_s_s_m_update_8cc.html | 19 +- ...stematics___m_s_s_m_update_8cc_source.html | 61 +- _htt_systematics___s_m_legacy_8cc.html | 19 +- _htt_systematics___s_m_legacy_8cc_source.html | 94 +- _hybrid_new_grid_8md.html | 19 +- _json_tools_8cc.html | 19 +- _json_tools_8cc_source.html | 27 +- _json_tools_8h.html | 19 +- _json_tools_8h_source.html | 27 +- _limits_8md.html | 19 +- _logging_8cc.html | 19 +- _logging_8cc_source.html | 45 +- _logging_8h.html | 25 +- _logging_8h_source.html | 46 +- _m_s_s_m_update_model_dep.html | 32 +- _m_s_s_m_update_no_model.html | 72 +- _m_s_s_m_yield_table_8cpp.html | 19 +- _m_s_s_m_yield_table_8cpp_source.html | 76 +- _main_8md.html | 19 +- _make_unique_8h.html | 19 +- _make_unique_8h_source.html | 23 +- _model_indep_hhh_a_zh.html | 24 +- _morph_functions_8cc.html | 19 +- _morph_functions_8cc_source.html | 99 +- _morph_functions_8h.html | 19 +- _morph_functions_8h_source.html | 37 +- _object_8cc.html | 19 +- _object_8cc_source.html | 37 +- _object_8h.html | 19 +- _object_8h_source.html | 69 +- _observation_8cc.html | 19 +- _observation_8cc_source.html | 83 +- _observation_8h.html | 19 +- _observation_8h_source.html | 53 +- _parameter_8cc.html | 19 +- _parameter_8cc_source.html | 45 +- _parameter_8h.html | 19 +- _parameter_8h_source.html | 57 +- _parse_combine_workspace_8cc.html | 19 +- _parse_combine_workspace_8cc_source.html | 85 +- _parse_combine_workspace_8h.html | 19 +- _parse_combine_workspace_8h_source.html | 29 +- _plotting_8h.html | 23 +- _plotting_8h_source.html | 77 +- _plotting___contours_8h.html | 19 +- _plotting___contours_8h_source.html | 35 +- _plotting___style_8h.html | 19 +- _plotting___style_8h_source.html | 29 +- _post_fit_shapes_from_workspace_8cpp.html | 19 +- ...fit_shapes_from_workspace_8cpp_source.html | 85 +- _post_fit_shapes_from_workspace_8md.html | 19 +- _process_8cc.html | 19 +- _process_8cc_source.html | 89 +- _process_8h.html | 19 +- _process_8h_source.html | 67 +- _python_interface_8md.html | 19 +- _reproduce_run1_h_t_t_datacards_8md.html | 19 +- _roo_morphing_pdf_8md.html | 19 +- _s_m_legacy_example_8cpp.html | 19 +- _s_m_legacy_example_8cpp_source.html | 128 +- _s_over_b_tools_8cc.html | 19 +- _s_over_b_tools_8cc_source.html | 43 +- _s_over_b_tools_8h.html | 19 +- _s_over_b_tools_8h_source.html | 33 +- _systematic_8cc.html | 19 +- _systematic_8cc_source.html | 127 +- _systematic_8h.html | 20 +- _systematic_8h_source.html | 266 +- _systematics_8h.html | 19 +- _systematics_8h_source.html | 135 +- _t_file_i_o_8cc.html | 19 +- _t_file_i_o_8cc_source.html | 29 +- _t_file_i_o_8h.html | 19 +- _t_file_i_o_8h_source.html | 33 +- _utilities_8cc.html | 19 +- _utilities_8cc_source.html | 95 +- _utilities_8h.html | 19 +- _utilities_8h_source.html | 75 +- _validation_tools_8cc.html | 19 +- _validation_tools_8cc_source.html | 152 +- _validation_tools_8h.html | 19 +- _validation_tools_8h_source.html | 45 +- _validation_tools_no_j_s_o_n_8h.html | 19 +- _validation_tools_no_j_s_o_n_8h_source.html | 39 +- annotated.html | 58 +- annotated_dup.js | 34 +- classch_1_1_auto_rebin.html | 23 +- classch_1_1_bin_by_bin_factory.html | 23 +- classch_1_1_c_m_s_hist_func_factory.html | 21 +- classch_1_1_card_writer.html | 25 +- classch_1_1_combine_harvester.html | 193 +- classch_1_1_combine_harvester.js | 1 + classch_1_1_fn_timer.html | 21 +- classch_1_1_fn_timer_1_1_token.html | 21 +- classch_1_1_object.html | 31 +- classch_1_1_object.js | 2 +- classch_1_1_observation.html | 25 +- classch_1_1_parameter.html | 21 +- classch_1_1_process.html | 25 +- classch_1_1_systematic.html | 120 +- classch_1_1_systematic.js | 2 + classch_1_1syst_1_1_syst_map.html | 21 +- classch_1_1syst_1_1_syst_map_asymm.html | 21 +- classch_1_1syst_1_1_syst_map_func.html | 21 +- classch_1_1syst_1_1bin__id.html | 21 +- classes.html | 124 +- deprecated.html | 19 +- dir_0a870e65c9e7f54fc0acb33d59ad08b1.html | 19 +- dir_49e56c817e5e54854c35e136979f97ca.html | 19 +- dir_510ea882f93f24ffb670d111f3c48591.html | 19 +- dir_52df7a7aca2af22ef5ab0d24eb6803a9.html | 19 +- dir_5dc317956fa60ac77cdbadd82354438e.html | 19 +- dir_67357b0f7d17e3dc186f37df5b958e70.html | 19 +- dir_a11d860a120a6ee231a0ac3c6fec920f.html | 19 +- dir_b40e54ab5ece44508715b2777a1a95eb.html | 19 +- dir_bd86b6048931602d3e119f261829765b.html | 19 +- dir_bd86b6048931602d3e119f261829765b.js | 2 +- doxygen.css | 159 +- doxygen.png | Bin 3841 -> 0 bytes doxygen.svg | 26 + dynsections.js | 33 +- files.html | 21 +- functions.html | 24 +- functions_b.html | 19 +- functions_c.html | 19 +- functions_d.html | 19 +- functions_e.html | 19 +- functions_f.html | 19 +- functions_func.html | 24 +- functions_func_b.html | 19 +- functions_func_c.html | 21 +- functions_func_d.html | 19 +- functions_func_e.html | 19 +- functions_func_f.html | 19 +- functions_func_g.html | 23 +- functions_func_h.html | 19 +- functions_func_i.html | 19 +- functions_func_m.html | 19 +- functions_func_n.html | 19 +- functions_func_o.html | 19 +- functions_func_p.html | 22 +- functions_func_r.html | 21 +- functions_func_s.html | 26 +- functions_func_t.html | 19 +- functions_func_u.html | 19 +- functions_func_v.html | 19 +- functions_func_w.html | 19 +- functions_func_z.html | 19 +- functions_func_~.html | 19 +- functions_g.html | 23 +- functions_h.html | 19 +- functions_i.html | 19 +- functions_l.html | 19 +- functions_m.html | 19 +- functions_n.html | 19 +- functions_o.html | 21 +- functions_p.html | 22 +- functions_r.html | 21 +- functions_rela.html | 19 +- functions_s.html | 28 +- functions_t.html | 19 +- functions_type.html | 19 +- functions_u.html | 19 +- functions_v.html | 19 +- functions_vars.html | 19 +- functions_w.html | 21 +- functions_x.html | 19 +- functions_z.html | 19 +- functions_~.html | 19 +- globals.html | 25 +- globals_defs.html | 19 +- globals_func.html | 19 +- hierarchy.html | 19 +- index.html | 33 +- intro1.html | 73 +- intro2.html | 68 +- intro3.html | 62 +- intro_morph.html | 32 +- introrun1_h_t_t.html | 42 +- limits.html | 96 +- m_a-tanb-_limits_8md.html | 19 +- md_docs__charged_higgs.html | 53 +- md_docs__hybrid_new_grid.html | 19 +- namespacech.html | 37 +- namespacech.js | 115 +- namespacech_1_1syst.html | 29 +- namespacech_1_1syst.js | 11 +- namespacech_1_1syst_1_1detail.html | 19 +- namespacech_1_1tupleprint.html | 23 +- namespacech_1_1tupleprint.js | 4 +- namespacemembers.html | 273 +- namespacemembers_func.html | 270 +- namespacemembers_type.html | 19 +- ...embers_vars.html => namespaceplotting.html | 30 +- namespacepython.html | 122 - namespacepython.js | 4 - namespacepython_1_1plotting.html | 3272 --------------- namespaces.html | 51 +- namespaces_dup.js | 2 +- navtree.js | 32 +- navtreedata.js | 38 +- navtreeindex1.js | 166 +- navtreeindex2.js | 348 +- navtreeindex3.js | 298 +- navtreeindex4.js | 11 + pages.html | 19 +- plotting_8py.html | 231 +- plotting_8py.js | 84 - plotting_8py_source.html | 3687 ++++++++--------- post-fit-shapes-ws.html | 22 +- python-interface.html | 94 +- search/all_0.html | 19 +- search/all_0.js | 32 +- search/all_1.html | 19 +- search/all_1.js | 18 +- search/all_10.html | 19 +- search/all_10.js | 203 +- search/all_11.html | 19 +- search/all_11.js | 38 +- search/all_12.html | 19 +- search/all_12.js | 10 +- search/all_13.html | 19 +- search/all_13.js | 30 +- search/all_14.html | 19 +- search/all_14.js | 12 +- search/all_15.html | 19 +- search/all_15.js | 4 +- search/all_16.html | 19 +- search/all_16.js | 4 +- search/all_17.html | 19 +- search/all_17.js | 16 +- search/all_2.html | 19 +- search/all_2.js | 110 +- search/all_3.html | 19 +- search/all_3.js | 9 +- search/all_4.html | 19 +- search/all_4.js | 24 +- search/all_5.html | 19 +- search/all_5.js | 53 +- search/all_6.html | 19 +- search/all_6.js | 69 +- search/all_7.html | 19 +- search/all_7.js | 23 +- search/all_8.html | 19 +- search/all_8.js | 28 +- search/all_9.html | 19 +- search/all_9.js | 10 +- search/all_a.html | 19 +- search/all_a.js | 20 +- search/all_b.html | 19 +- search/all_b.js | 47 +- search/all_c.html | 19 +- search/all_c.js | 7 +- search/all_d.html | 19 +- search/all_d.js | 24 +- search/all_e.html | 19 +- search/all_e.js | 88 +- search/all_f.html | 19 +- search/all_f.js | 45 +- search/classes_0.html | 19 +- search/classes_0.js | 4 +- search/classes_1.html | 19 +- search/classes_1.js | 8 +- search/classes_2.html | 19 +- search/classes_2.js | 10 +- search/classes_3.html | 19 +- search/classes_3.js | 2 +- search/classes_4.html | 19 +- search/classes_4.js | 2 +- search/classes_5.html | 19 +- search/classes_5.js | 2 +- search/classes_6.html | 19 +- search/classes_6.js | 2 +- search/classes_7.html | 19 +- search/classes_7.js | 4 +- search/classes_8.html | 19 +- search/classes_8.js | 5 +- search/classes_9.html | 19 +- search/classes_9.js | 10 +- search/classes_a.html | 19 +- search/classes_a.js | 8 +- search/close.png | Bin 273 -> 0 bytes search/close.svg | 31 + search/defines_0.html | 19 +- search/defines_0.js | 6 +- search/defines_1.html | 19 +- search/defines_1.js | 4 +- search/files_0.html | 19 +- search/files_0.js | 8 +- search/files_1.html | 19 +- search/files_1.js | 8 +- search/files_2.html | 19 +- search/files_2.js | 28 +- search/files_3.html | 19 +- search/files_3.js | 6 +- search/files_4.html | 19 +- search/files_4.js | 16 +- search/files_5.html | 19 +- search/files_5.js | 4 +- search/files_6.html | 19 +- search/files_6.js | 6 +- search/files_7.html | 19 +- search/files_7.js | 12 +- search/files_8.html | 19 +- search/files_8.js | 8 +- search/files_9.html | 19 +- search/files_9.js | 26 +- search/files_a.html | 19 +- search/files_a.js | 4 +- search/files_b.html | 19 +- search/files_b.js | 12 +- search/files_c.html | 19 +- search/files_c.js | 4 +- search/files_d.html | 19 +- search/files_d.js | 4 +- search/files_e.html | 19 +- search/files_e.js | 6 +- search/functions_0.html | 19 +- search/functions_0.js | 62 +- search/functions_1.html | 19 +- search/functions_1.js | 18 +- search/functions_10.html | 19 +- search/functions_10.js | 179 +- search/functions_11.html | 19 +- search/functions_11.js | 28 +- search/functions_12.html | 19 +- search/functions_12.js | 6 +- search/functions_13.html | 19 +- search/functions_13.js | 24 +- search/functions_14.html | 19 +- search/functions_14.js | 10 +- search/functions_15.html | 19 +- search/functions_15.js | 4 +- search/functions_16.html | 19 +- search/functions_16.js | 16 +- search/functions_2.html | 19 +- search/functions_2.js | 64 +- search/functions_3.html | 19 +- search/functions_3.js | 21 +- search/functions_4.html | 19 +- search/functions_4.js | 24 +- search/functions_5.html | 19 +- search/functions_5.js | 46 +- search/functions_6.html | 19 +- search/functions_6.js | 69 +- search/functions_7.html | 19 +- search/functions_7.js | 7 +- search/functions_8.html | 19 +- search/functions_8.js | 24 +- search/functions_9.html | 19 +- search/functions_9.js | 4 +- search/functions_a.html | 19 +- search/functions_a.js | 5 +- search/functions_b.html | 19 +- search/functions_b.js | 33 +- search/functions_c.html | 19 +- search/functions_c.js | 7 +- search/functions_d.html | 19 +- search/functions_d.js | 16 +- search/functions_e.html | 19 +- search/functions_e.js | 49 +- search/functions_f.html | 19 +- search/functions_f.js | 37 +- search/mag_sel.png | Bin 465 -> 0 bytes search/mag_sel.svg | 74 + search/namespaces_0.html | 19 +- search/namespaces_0.js | 8 +- search/namespaces_1.html | 19 +- search/namespaces_1.js | 3 +- search/nomatches.html | 3 +- search/pages_0.html | 19 +- search/pages_0.js | 4 +- search/pages_1.html | 19 +- search/pages_1.js | 4 +- search/pages_2.html | 19 +- search/pages_2.js | 2 +- search/pages_3.html | 19 +- search/pages_3.js | 6 +- search/pages_4.html | 19 +- search/pages_4.js | 2 +- search/pages_5.html | 19 +- search/pages_5.js | 2 +- search/pages_6.html | 19 +- search/pages_6.js | 2 +- search/pages_7.html | 19 +- search/pages_7.js | 4 +- search/pages_8.html | 19 +- search/pages_8.js | 4 +- search/related_0.html | 19 +- search/related_0.js | 2 +- search/related_1.html | 19 +- search/related_1.js | 2 +- search/search.js | 52 +- search/typedefs_0.html | 19 +- search/typedefs_0.js | 2 +- search/typedefs_1.html | 19 +- search/typedefs_1.js | 2 +- search/typedefs_2.html | 19 +- search/typedefs_2.js | 2 +- search/variables_0.html | 19 +- search/variables_0.js | 2 +- search/variables_1.html | 19 +- search/variables_1.js | 7 +- search/variables_2.html | 19 +- search/variables_2.js | 2 +- search/variables_3.html | 19 +- search/variables_3.js | 2 +- search/variables_4.html | 19 +- search/variables_4.js | 2 +- search/variables_5.html | 19 +- search/variables_5.js | 4 +- search/variables_6.html | 19 +- search/variables_6.js | 6 +- search/variables_7.html | 19 +- search/variables_7.js | 6 +- search/variables_8.html | 19 +- search/variables_8.js | 2 +- search/variables_9.html | 19 +- search/variables_9.js | 4 +- struct_bkg_info.html | 19 +- struct_col_info.html | 19 +- structch_1_1_hist_mapping.html | 21 +- structch_1_1_s_over_b_info.html | 21 +- structch_1_1syst_1_1analysis.html | 21 +- structch_1_1syst_1_1bin.html | 21 +- structch_1_1syst_1_1channel.html | 21 +- structch_1_1syst_1_1era.html | 21 +- structch_1_1syst_1_1mass.html | 21 +- structch_1_1syst_1_1process.html | 21 +- structch_1_1tupleprint_1_1_tuple_printer.html | 21 +- ..._tuple_printer_3_01_tuple_00_010_01_4.html | 21 +- ..._tuple_printer_3_01_tuple_00_011_01_4.html | 21 +- 489 files changed, 12041 insertions(+), 15821 deletions(-) delete mode 100644 FixBothRanges.png delete mode 100644 doxygen.png create mode 100644 doxygen.svg rename namespacemembers_vars.html => namespaceplotting.html (83%) delete mode 100644 namespacepython.html delete mode 100644 namespacepython.js delete mode 100644 namespacepython_1_1plotting.html create mode 100644 navtreeindex4.js delete mode 100644 plotting_8py.js delete mode 100644 search/close.png create mode 100644 search/close.svg delete mode 100644 search/mag_sel.png create mode 100644 search/mag_sel.svg diff --git a/FixBothRanges.png b/FixBothRanges.png deleted file mode 100644 index 6918246d44a2d7b3831f5b0887560c5606a7243d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34806 zcma&Nbx>SQ&^L+(3mV)5i@OBZpo_D(1lQp1?hcD3xVr_1-~@LI?oM#`+$GO@zwfQO z|J<$GsG_e|?d|K@Cjl7bW}G9fY)6cj2@S{wug1x*L}G9tc%+{spzV1t5sk8dd^ zrUVodBUf^?Gqbcdg@TffNKQpiRRQ7+>?dP?{){3nB6A=guUF_MD#Evb2=rI_j0lIr z-&(S<)E9{J1zy>n$)Ay)A~HmxOOHFeg!Ye7cjz!T5bDbv!~W0xQLoOG7N>pT#P4oq zP)haYNO0dvu%NV_1q@Ac&^d%YCIGQu;gq1EEnt{%`8763FfoyHVmkiXp4s+TSj;n0 zwY+Nm)tCR?J7x;&FD|06w^Lh3PKE$AZ-Nr+0foVrvu@y;CDLQ}u^c&91S;GFsd!jZ zwr7aFF{NKz>hbd}tiPP;kKj@$TIoxUtHn~*xIn1dPuacOVr!_2L7DwqBDi8%@yW@k zS_#ODoDV+*O8rK@3#26W$&eT?Y8FV|Zto(qYdQU$IJ{p^Nv0z_5hKI>n#M{CVmITl z!y#Dwh!wh&AnEI<$zy^ui046U*%o|O6cK17x%ITz(qTUi1q+33uj%_Sep5H^y|QHV z9pZ9r@N^?9DeCqvyi}ZhEi1nxKsaq;;yntZb?ItPEVT zOR0P&)ot|$H&>~aT|BzJqv2fdtC+I~6B;D~N5d1`t!cP9SV3G9 z3kfUFB~y)GJnRF8_Mp9z#?y#D&cwBU*pUz)so&&5gzxA=XAMA1F^NZ=hOTb!tRi~_ z&%r_AVg#yo!KYAWP2oCB6AF1t2Ed%t0GJ0!toA7@cLTi-{<7~S3o?mD)^q7EQNRiW zWQ164kv0>NB4_K>ENqQ8k67>*ZCO-{`{j|bh2x8G63ujnmT?$j!mM>(gmiJ^#VX{5 z2=j&7Js>I~W(G?I6Tz`3T5nOz`<2-BJe(uusUgO848CfGYBis_EY{fe-H z;1>3n>zWZ@1tYsc8vBdrF4)+~f9(t>vcKLZeT3{OvEhV@O-rH${ug>e%a ze=%J(e|aEluam?^Ed0woxII3UXpOjT-L3nPCR=u?MrTbg%427eUslG#|GG;Hg-Nh9h`MMyw~eJX~6YYA+b(i)!*x-LWjwL zl4$1O^haZbDzcYr?80n@X4yce4zkBU#p;sd`D00rQkI3f7etkVnB?DJ@L}PdYe0Jr z4DmZDQ4$L{^KN*1cxQj24N_gA_6>M^sIxANKypBE=p-hpI3C+)Mhu-_1Q#OD2}%Gg zpa?i#H8?Ij{$UVQ0H+maEp|(uJXk#l++lP?Iut)8UzH}iBzy=qqQy~@XizqGrZ|fB z%>QV?$p3OwdZW8kmwFHmQBh=n3B*5IKc+K>m)^BRb&FFy$M^UQ~#2geEfe zFI=NOO*-{hHDlEC&W_NCAHK(w3cn6{J~RdY;XsV*UUWz6z|aq|>t#6CZiDX(b=!u$ z*MN!1k*FbW#tKBb2v+T}{*0NMRFiEVXis{Ysn^3#kuXS}hLO3kCP!ZMVINZi(+$Ha zT>h7W5xPUXIE7_Aqx5NkJyukb6g`Cv6$wS=N0$UoAlcxh$(LFtUjGc~y+o9u!kwU< znH}a!mCN`Ha7IE#xo$JDlx@`tVT+F=s-woP=WZzNF!qN?eyTLEg4XB7&!t5f#Vf^a z38|^`scs3`^b?8tjGYp%;m;BewhwWtIAy$ZseGCAc~wQEIb6zTO6!vroW^N*ObIDc zI`ZWOnfZbRK1w+Znsjgs_Sm>|Np!RH&U9_6Nh+M6YxRs$%^b}#ce#r)qfT%J_y@Qe zOV%}*Q3Yro65t2T^~%t9xu^05@Z{Jz{?HKp`ejkkDOY~bLXvp!#X zM^Za2>);%agthWrR}Aud@{E> zofW8F6xMTTTXw&_-@1?*SfBgcFxo)TuxEKP_jQJF_V*OpEUty!oKW#$$d zPSdC51m&INM&zs0F~>5-*hgKzxqQptL))|5Gu_i*QbLhJ$?8Lk8b=C7V*YUdVVGv6 zwm{ocXHQ36%TMjQ5gmBOgp`q%v1-woq&fsoLgOs9J{df|M$duw3`l86ZNZP?AS3Io z*I(V1uQOcoe=<*5+btf)2&g&sMw>ZRoXqw{RqC+Kf0&WTQULm>NaP+zkcI@)a7G!8`%e@?HP z2b&WQ;*Upk>C8_G=3$u35Y z1 zYlSn)=`FMk8cfwnv`4|>X)xw84ryL`<+^M>_B6?Er*JXO=ry`)O(+HktKraLBSqOV zx#@IR!FL2U<@pq@4p%aC;yOjLq-v%nL00`fJ(mab^z5c*fi^xCDMXsi#YFi;PQ*Ygny?zU7<08+3&2WS3p@ zM~f@We*V5qUS2=jI6hc9Y^d{0y{!U&$#%VRU0?gqT->xc3+46$RGXmugYc2Oq^EyS1_1WmWeixs+LYyksD$SW& z^{v}>JP&tF_eWebh^uECdFwOpS2yoIoW!0qXk=FXc58O#bXGVLSlwN8xlLPdK$#D! z)^EXd&A&1m9b0ZHTE|-7Tk&()pA<)n9%;sq63X?}*)>$-3*nXv05Zc~p6rIAM|3 zC;dC}r@ArVK449wN29k|qkYQVX`}LGd9ORXJM64>4Yi%+HRmFCEB|WXx1vLK7TVaW z++*8r)M9FA^+)|PbaPa66wS{m*R=lKfkg#S=Z{cO^>FU4{&zf)fyb{@pTu3wld$d; z8Gq&jQL}W>+@Ue*@cotCB^QyRFiq&aWn=sWLlZkAQ)YJ?dk8fYlz=-Q9|a%e`t3Fg1^GV`XDdMpO?f49F*`?7@=wg1%&Zhb$mHbY0*)qTd?0bj z|6zyx5~Q$jcDCnZVR3VFV|L?UwsSORVdLfHWnpD!VP|K8P%t@p*g6}!Gub*({wL)B zl_PHIWb9~Z?`&yjOa3O;(8$ikS&)L_ZJ_`2`EQ=4?w0>|BwMHdQ469V%i9wcHfC0q z|05g1D)4rfPs!5V)LK*A(#F)*2{MKdFBhl4Kl=aAlm9#7|Kim8U!2_R|C{rFJ^3F_ z0hTuf{+B}kS?k|jh`EH21z7%%>4lIN?1+${phTd6;-aeV(8oRq1|)qgH!bqhYN=Fr zYYdHS{RZi4USSw8NPzf9-%HS1_GNK9pe^+?Asq%*>tTDkZFILm7s+<07fWsB+Ue@w zj8*>WWX8qT+TmnQ<2W<7v(w|z#qV|NcVpajLSfKcnsAITxB&o(uIz%{+P+%Ex8KY# zDFxPIHIQpCA+#(A_~LH8`9?)8JuGS}0Y5ym>`U&Q6j7zN2XML?ps-%+h^!P5r3cZvnhU>3BTU& zcjnYj$1U5v5WsZY*PS#!T6n=7B_ye~DdMtp*Q<>8j&Xm9+jc1O&@7!5Vi;6 z%uWC3R@9Sp>Yp*Y4!q6F4NhDMC%Ma~`cASs1C-%=Eo5S@T9-|oDzjrO%0NrL>UGwB ze^c!jpWNGxozKt&&o257RPRs;HN8XuSlxSL=?P$P zpatg1w@R1Aq6Flhn!WG*ivzkc17_8>2 zY>sJuB_u`f>0At~uSb@e`#?ASeV9L2J01}B{mZcOn66`g37m-^i!?Jc+uDj^>5nGh z&;^64jC$;ORt`{)Mc+JVj4`?KY+Nl-V~U`pceoMKB6K~3PA*(*JnU5RQ(ayCv-q55 z3DIhPtGZe}nb+;{z>s-X_wY_mjs{tV)2oMlnQV=nU#VC7`k9oiE%W8o)l{9iA~!BJ zHgSOzmn(f=XC49QvdJtx;PF{= zxJg_0*S~R@v4S$#SDYr=2Tyr1V7>03z7DVG0LSXOA;P5f;A9rm$o#|#!~>1o3atbB z%KaD5Bv_m6paieLO~QbO*s_Gn;*E2=mfb5s+{pQm&2Ftd~{CR)O`?6(P0g#OPDkYG~D5WS2 zuh`B*lx{&>9s4+0{Z}Lwv4Cp+LrviiNS>fY_=j68!I706@?DSWbRB%`Djm4zONKM0 z*NiI|?N<7V-zyc({*$W#Ld!=7GdEW+s=QiWBu_tXT%s~pG;Y6E8fk-K_2zIqI7XmL zDviw_OU#1;L{0Ef0s1)ZGR5Q(I2NTRHd;o4j(%#vk0Ys`M+!Aa+@S-F~vfIg02$N1@PEAdX;IPHn zzZf%y!=f&|ymTDR5+sTfxJ2BW$X<`hty63Ik596=kNBuxTk+^}gk@m#I|sT;+RGTk z6E%qS$S_E=rSQg?{{KXnIEf*MiZ>Jl&pqF#ZoK%@Oz^`W9$e)m?D3M3&0 z011=o@Vv#d1OVqfwE)W^h0Q;;wSz@^tX0OUQJHlb-5!G(Tx}lF$ef-rIb=vzDYB)-&d*p&AlcryfZ3}lv`*{h3g3+eR zhaUuFhDl5=+Uk?~9cu>&DeMt>h_a4OtOQFLs+wUq%tkGq;k-C4F*KWSnzthmNqzeq zMy_KRp6~l{MD$!gL{G+2>DR1uzpzNKSr(wrXP!y9_IGo~)h<-G?QdMnlVotr#7$&+ zSitb`gzb@(0(b@axg!zuoNHX`f{vXxB4=KjZv})OuK@w16zL>hBrA8`*eq?Z$BSn< z`Yan!`|$QtbV56(b6+%dk%hu&NxkN}_r9Qc?q9T_yfhzk3VWK&XPP&mNs=3aLAam? zYiV1!uM}NBWr^Eva)Z8q@M%6b5soEAH7O!18)?wbl%Z3$UPgUyP#h~s)LAVO z1j;Zqphl8zwwt#T_mP<^bKoCul&3!Y_!<=CCva+@55(rym(LrvYxDL(=eb`zQ6ANj z#>zbHUC8xq>pjt5A=qsY@{ZU^mx3wVy0r51;f(aka$+@Rx4)qCZBqny?5?B9jO5>M z!3(g&P7-$N+zBpGfR8%tU8>Sj&reqC!q7D`cejatqI%wAc742I?lL4Q&5|$m*zTEQIXK#YFc=n25Zm>x>c5CKF zM1h*s35-5an`mmzeg+p9F2z-Rm&&WzJl&n;(-n*fsZfus&2g!z(k8o-@dDoXy_ek2 zN(q2m!6)M5tp-dc{N)_PS^NadTSIAm8RHm?vFT4}w`5RN0yA+iOUKyGYo#ha%s{5? zGnIkI`0VW$+`n#|BUdkfym?H^*84;|cR>{3;U?d7bTBT`Cn3N%+K9*W6rfg9NK4gD z@jE@t)em3gXreuH-fgF*<#&)Ie;2`=L`r)h{S}kn7f8VB_7O;pAz|7;Ry`iKwXH}Z zZgIZYhQec<##cjT#m#&Fw2cW4MGx|XMUWv8xTI(O&XrHLx-k%;;=K_Tcurp!rE?Z% zwCx(d;crA3K$dmVi#L9?StRSf_JFFHhomc^l$@lQRnUGI;zq%kee2_H-xxF_jUn8; z7MJgS_5i5)ndNE^4>b8DBEt!oxL1a$gS z-NQLiLa+?0BU5ib>_ff@~M#Nk1zgYV9iS>ANP;~=WQw> zUB@!Aa=L^zk(!X1oj$}@2+;z!S&Ao09il!Re`@2i=;($fR!+>XFd9# z#_5F@quB<`)dv+}Dp)dC92h@$*1*&?2Ua5})Nyl8r|WotT0iCwY^>g~>|*HeyB{`J zE`oy=8Lt8r{n^9>)3MvXq!A~`ZI`U`sv<~yqi6}G&jozXsxUSN#~0KXft!!@z90H( zyl{?*P{tnCha@LGC@~?Oux>Wo<+~?+-PR!sC^*~D(ST?BHjx{+N>5D)AoyxBp;!?J zp4_U%aIH;Mo9CIN-Odg4U02{nkD-acxI0Ez(_s{NuG#@aDBsH(MWJ^?QPGucf*aA? z;_m;nF1x}mwCddaboG&dyMeiz(?Tw3wU`|W_7x1!6MWXJLux(?p;fPdMIG)clUKGl zc>czA?0+m>`x5?aaxWiKcQ(kykp|NI9AJt$G(?+8Y90kd0%4(m@fWP9-sTx(w;TW3 zPoi2W{q90M-zr4Z7Pqi>6VS)wqR@$il8|w1ecJ9`g~V6Xrt+Br%c=fCwX9t7pu-(n zNgAtj_Y~2#SbU*Q3VVO-{HG=kTPN*R6naAV(V?M7v)3>E`PD`ypi4f@>8+@136xhd zUkMU>)%uGr9D3W165)9ZrLJ)p%!}944->W7hJrg#(k8XH@ZF2! zn0vlkYvAc(jKQZN-=o?|^}KE@t00%#hnk8MNGy?51;DvCu9T9zmH==Ngcd9LL~)BW zxwy=z92z+kNr@kwheD0|NFehPyBx3f5|?J99gRUl%h)&$S5SziV|LlBuuw+4&q<;a zt_&5$npClq_~8kA-ct91|GV>a4a`oJtEMKKfV-&jq62fhwhuIalsBAFkntRq>Ku7z zCbkXP_3fH5t z1gZCBjSZYxgg+FUEIK{y!|iBtUbW9TM;mE1UU`+~XP#i53LXiw_Hs0I|CXO}#u69* z3s$wVeX7kPsj-%w*MN=H0CzL^G&VQTvH_?yGy7AxT=I8^wO~o=Eotjl<()BG{3F$E%f0c3$#gQkIyUCj?F& zE73$%b;|=RTl+kf`f`nO)l%?$3Z{L%w4Y4|bM{GfnAeqXDW*eZd=lJvRFo&#FFw$5{{XHS{n=vM3m3FxU}CgZ9ir|2RRlf9#e_|Ut% zV`f4vm3XF|(QRH&4NP*N#6=xH1+xPQe-@?hJp94J5K>1{qqu6&BaHsGw4NyQeoi}X zpQ3PVGg^kZ!ZtPrVeA09U55)$A&0$rgluRbK$Vn)tWRN?#Z@5tL*Bsq1jB5SmWM@# zax?hVr~W8dRb}3R1i)o~AmWKq*Z#!CwxlO`#7{=_tBF}!oYQ;D{5%JJ&lL=rl)qO@ z!l&*s?mYMNGs1FFblTBO|F z8vMQ-x1@<4XL`De+@7vR>DacwYv_4U6)9%>-lH57kVJ~eCj};0OC5)^)BXXD+*fw2 zEjVMBa!63s7b`i&i)zJ&f$WmvLJziw#MfriTq&OtRSU#XJHe-%p42)T&kd+?vS1K_ z^I53m#qW0-E_ei1^~#CS+fpmRnZxC(um~5yrN&-S0-Y>hXn^&lwWkaz32Q2_5}_9l z^{zfi+1^tfeU^OrVUOpg3KqDFG{&^~(B}ifuWTKc$<+oc%?{pc-WxySA*-LVa=^Tv z7wS*9vwnYQSXR?v?8H?0#P`ticVPg7z=8nxICH0!0?%!3)p=dV5-XNH)p=&hWjWa( z#GKr_=F6|{x|!{zXzSBn+%B0J3^+t6J>&RoM6XrrJHMyCX?XTJeM(qRptcPk&b|9U zO=r5lt-^LOxwx$V69qGWJuQ^)Vj6X5!lpV$wg5r7MnIIdSqa*4T0Ti|bq=j1rN#yV%0^~r$^)lPPAt1{Z zM!a7_^hqS-Qu{*yPn3j}nbp;QXiH@fq^tSeJ+)`_)=^F2RzpaL zZJ6I06{3%jrZ2|7VNn~>3jP0QvXAF5cTuClZF|B!ZQX}HUegbpGA`aA`g_6jo(w-7 zZA}vX$3Ky{0sR;yG(d^w*rQ8$Cx@9BeTfL+59XN;^n2~+7#%M!*$y9l6{MQpdO65M zIbd!8rL|zAw(HTv1O8Wlfc=CpW<_Za-GD+rM|Ec$J3mfQCRt2-CPWc(2%4iRVal6Q zr5htER~^wK`vcuz-Llw_Rk-^xRsR+4Y*at^=il2-TTvMq8T)mgJHxd$4_&Bel_i3Dk!0L% z{>|VID?U$es10PcxG*jNi5`dMjrtCF*T;wKfuOr*Oa%`*g*0~L^{25_&5liBwmkCp zOmh^U)A(Gz+7Q$?s_Kz;Mp^{@2S}O19Z3)GhY1UQ@DTLMU(d;%bi=09m1_JuneYsj zK<Xn{G85_is1slWx-Z{x+I#taRVX z)fzlf?oyPTZy^`2Kd482>uDu&NH9tg3*76XD~P>cL+uP6BF{F5QN}lno(~bt_qOpm zpI|+&I4ZpE9N|5P{xcIlg;HFBw=TTjM)*bZpM>J`!(s;Iah4i10(Rnduf0a&gyYKp zC`n*$q=$*o3X6=lOrCJ?gTmzBz`0nloGkgW?MTBj>whgXp%kQ_-fmvVe+xP=xdD(K zNE*x(`lbvIBsd8N`bghk3^3dqG9>>Y#a5|XqFWdd)lyv zYOVJsglwF*JB)PkM87CyZ3?U^n@~5e1qa3t zh-R%ZEe_IRf!b9=qtHdO?Y^XqCES%_oowk~x0!1P*jhAN;0B~nVC3C9%xMXMvG$ik z+jJH9e}~N!JtSmKP3!XSwFU!aM(Sqm8-nSX1B++hL2OITi;2%Y8#hzz(5kZ#CMTnw znz<*|*-Ff#)k2E%2#uy6L#(-g$tlq2ooTW2zjb4|e}gm1 zDh25mNgJ8sByyDDww~IWw%qcIT@Jb}=sj;*u+$i>dMUWl3pfirb`N(KI$XJmh<&g_ z?fVq!`aQzb$JbUM*>bRhc#j#=5$m?cC>eR>F|7QenayWr!v%DJH_YHECBAy>j2KZo z4%jxgx8`8ZSBM2Ob-V?KA)>$p|9a$0xvSISB}emWSOW9qk4bCr^h4~n*e_sVYTzIcXgs z$pvZs{jdKjD?Ln7QpNzm-yz*}DW%qSs#0|yL@tgu-#Wk@T%QQ^yVLkFn{v|YZJQ5} zH2`qpLRTB#05B+M%vs9lzh-L@m`TXSz%o?Qh_Pviomdg=Pcvkd+%816;0krM#X%h= z8BivyKT09RNw>7FaHO^ZDEkpwP0ZvmZ+1{nr5&97n9MqvcgvDA?j>l zlmJ9m$L?9B-3NbqafN#H7RwTl1Y@!%3Q9)JjUxKK43*sejEsL(szL zs^~HhSoGKvVJ69#P?d^jM+vS&%tsDGQPRowb*i;7A?N*QO2K=qf9Pmh1XN~oW+(gC zMg8#+ei*Wny_HF@s*_Uf{u=_w1{Vob@H6y|c(PGcYAvNI#lPnIhrfnFr9Qa4j`F0_ zG@^@^il-Ey-RT~mK>`g5lSjnyk#d`XjZ@nV?o0_o2h4}fcgqb?$RF{ThW91lq5+@q z1QHRs5NXH%q!Ef4kPRK)MceiJTI&Z+%j<}Px(%Y3t=>cbgR`Zz;gBsoA4z2IaPtRC zUyx)b0i#@MYHFwKOaUTLf?l`3&Nq9L@~Avoy znwtvjq#S0^RCKwJ1tv%KV@>+es-0H8#}93nXgE`H`ELd6?Ckb)Y8spO+i~0;3$t&D z$&PqTA^H+}(XJW8my)9z4k>YXYU++!@7`8|0On9As*;1hH40Y*{OWyC2#pXZG&|s5 z47b9-B<18~M5UU*QJFxt!y&h(e+)2rDBxU`+MoEH4i=Q#ipn6n3p$fyhbWOI5rc9m zrE%TgjcII~=+X_mGLS6^v5^;Slt?W_O$hy(4dcqsXzfex2Sk}cEie``WK+{h0+VjU zRkA}(D~Kx#TCH+eLe_!f>IanEAxT`yDDClTf!U=YT1+xwXetJ7c`9jkmEe3zROyTI z!%ivKnyOibC=k=7jfJf-`ztIuGbrbpC#^u4hOqCHMCbhUi7Y2?+FMFCb>S_*otfdT z)eMy*>$^Fag2(4m(J4yP%48Tl&X}J6xRB3dj@^34X&R`k19CXy+Ss7wa#~~{yIzWE zubz-WYJjuH4w`d1QE=&zFt5^K0!mPRT4*ywCH1_8za|#ISkYFsPQ3o=fL*p*I`PSp5FSX2cfrfCBMAER$uRpqQy5F}(CjR`CM8IHkb*73$r4 zf)Jg**BZwx^b((JRLXISj3=@{a@h_r$etz_e2PVpmL3-m|CN?@$ee0q$G5&v2~LgW zpa2ywlzt~*pD1`dv^zW`Yy9lg&`2`0wMD!V)($JL>LB#F1SxAaFd>(3Ezuu+MiI`k z0d#mi+3$L?d9Cq~e&%16FO%n-txv5FC1*89n&G8pZLwK{3$_&5moLTRe~QXTpQ<@u z!gV{o{!*>F<;H4qkh6I^8zp>jF3+&OZd86p#9{e1SMn zO^VE!!|UJ4D;f;3gj+KxfI*OH3qB2lF(8LdE1%bcdY>1|(#*l+l36t`W9j=d0^#r4 zMZirr0$DR$VVSx*@BMu~=y*jfX0(E}8ylA1YBdnBTVd$QyPYhs5>)!nOm!Icu9x*R zi(y&jGLZ8tMN3}QOe)@&5V#v=kNi-!_K3vv!czhkr^K+L%acW-?nK4Y?$cFb!<+$L zo`DHUdbW;GX{w@Ef8~4(NXcP@36u1n26MzElx6vu6z&f4PF@gquIrfkTUdLfx#ob{1C5ziZYz|Dx&% zmYT0i%Car?vH8#_we93sG_&ZO$RfMtNx668?h*7NqX2bJ@d}7 zPq<{MU7WeZw&)srogRyV?#sb>_WGCBkk626;#x{4q-!sVp5bAJrsw4%eA?SB>ltr$iN*tyV_%ss(HI zyZPQ$2p+O!-IB!6SMHA28=)#sd_*NrN6xehdKNG<^UWDWQEBv>5eZ>**MVO%#csyG zL@V6LHve%URMIP4J+w>85sCpSN@>poSEIxG9L#XTzdRLV)|Zr@k_78TSFl_Bd|cW0 z+{~!EIzO%pxgW`H+CKg1x>c@!B4){eAS7(g%)gBPsUh@LtvSHt(`nA}F=SU!EYYPk zmN#KUGvUzr9)cUh4$|~;fjguzhcVe9i-cjh6o%m!Mu3FyAZ-o>IbJECJk@Zzr zl3;*No+M#9aRsAIK44e)K$|tn_Pc4Nv{IQ%4_GxS$B}nTG>#P7d$(Vx`MTCyKqfUL z`^B2$9hzLX-?NlHv7a}!r5g+I#Ll}U+g>Nsg+Z+W(auYGfMSDL(v587oY{CDVl?uR z-D~FG7s@h<5`bdd#VlIe2cCQC9}G#3=OWrY;3VYVTOucuQf@cT&*U8!V;%0-Q_9~2 zcuCg(zP?+zPoAi;_}FJS@AUjR*3;!cdL7;N=< zEZF$DPU2r~+2m>en|bB=#N`|7N0RkdSK(*^F&&%%gpI*3n|yk#i@G){Q6g9$y8>LL zs^HGpe8Nhtl_-jkT7cqJsk|kiyAfksKE{(YNZAujp!reME%yARX+2i2 zy^VmLL=03>Ky+YSD8=hfzwY;90F_F|93BJX+mHE+QCE@wca7nd`#Z8WCju*Hq^7GC zSqRi15=M~&O*S7A`fG=A|5ixymS;YY;;_^zv=C6(IeB|cs`Bz7pyc-$+VOeE0uJFu z^@3^yI5iT3DSrnGMK*;|R9P9*^Y-}ASE1S%IGjW;sV){)w7D-#7Tyr*jY+e}zGw>S28pp2m3=I_p%k!^+wMaq z&EWB0#KPjATI(dyWe#=L62S$hKQo2IBg>Q@fK-v|w354dj90=Cju?8D@28`&p?`R#kMOoxWI=EGBJ%KZ;wX zi*N(DK8xf#Gkm`zF47KgWyo)>XpL>PoKH^E|6nH|3=D<(y zJEV3?*M>t2@-M2Y*yO$X_Er5CpJYoPKIn*4VSq5zJM^}J-_mPI+LOJ0wD(2~){;&e z6m(g*OY2dGjYF22XQqJ)3M(Q{4om?h$>4yeVn) z{Ov;bx~WQ$h6YH0D6MWu*A+oyw*Aex_Wbn;!Tzt$&x&LrjND-lfq|7crlZRL>6mQrIo(qG+bXeYkW)%%I6qLE~cqI=2Q(<1~ec2p&cd zgRFG&8r9nyBBw!g!+X-&Wjpgl-qM*#p(`vmB1^OHgC9c<+A4M8zwv}H4|mAtxIo3m z{bo9Sa+g1j_gZ-d+Je~&P2i^wH++{YTX;^Jt>=-Paiw6heNM%yoEo50^;*Nx^0{+b zAMpuS$}rH19pFQqof;sxL70dE0)MDvJW%dY7ki+*ZSv+s?nmTrS#cs3CCAnvtl6V) z*E{s}F+f?>Rhf1A+aG4}BLf3RrA?3cTuByRj2ndj(3z{a8mOF*%i1`u!^mBaE zud-y3+!+nb9zv~U8tlV!)+UhQ4B}ezyn;#%U5qHsaz~yq?}(z3bu1wy?P_)~KF>V! z4l8g?`xkaRa6DN1jN7j|a(L`i$}MEPN^VLOG#vJwUcp~XkmQklQ+9SdV^l6L25K<6 zrM2mGM3$%jNYLsl@3wLlDaeV9&$S?`Xd}Ou4yfnUh;ae}gPm9p0g+}=(!*a$CETX# z1TNVD+Gg6@#3qh<8zFc%T|>n?8xQ*^7t8C`eYLynWi$0HF0h&1Tu$QWBlxTa0AaJG z)axjUaj>yn4CFec&vdjKP`0I2mU_tI<6 z)mL~-Cd2a|9D*xq>z=>yCUTXRB1nVMx`xmtRDT~}PPZuOGtYRN z>|aa7wRH>*k;r+e+wC}E=aP4_TwY%C9Df)6#5Q_U-6IV|YF@{;9!ndFYOJVuduwO3 z)5|UL_pgS-wgsitLJwY#FWFRK(VMFiP^ViePpB|hh)*#{AxYk(h1d_Q+X@MzjbD?- z?9DH|^3JzuNGQ1J7M^m>wZJhi`;ltmk@zkV%Q>675Ev0IlsULT;6 zV`VUgR-2 zJnS4HFGR9w{|!qgejecg;{kg+aPScF-d}fR(^{lN6z){HFN|%+gPB~mkl-of&qY4O z8n)I~InXxX(@-@~AF@wXb2`&|XRp4HOx$0|oGAuiO#`N;zxRYDl8EC7WO*szqTfT}4&{u%hKKpYY8i>Cij z;^h|<-!LrI3Xq4k>1I^BG==DBw!U1tD!zuU7KV<3Bqv#-6grG(KC-g-eNSaoQIZNK zRf1Z6Ni#-Y-%n-d9Kt8$a;4_Z&{DBaU}K@|qWIa*v~;*1&2p%*_QX(>k7PE3Cdjo4 zDJeN{v;b9YZN#2qxXoCLkiQ&W%&I81P-!;VX8tMRvR&c9vK|*LtVPiF_wV&^+Rzzr zso&xLqw7cAiq-t9AXQQ-^101N3ht8^S}BvJQZU(H_YZqx3`Hp$1M=KApZAiS1%4DD zTHz|!R&3Dnt-{ofk4ioQzgN}oIBi}^ZgF1j!6!D_nPO4XE#|9E)i^6_&F~eiAmkPR zN9NZjmtz`)J(DI@i%{t77RdFhL}f%b-;+@lxRZUO9*mi*Dn-gGqsG}arAz9mRnkrq zyBy9*N{Q|9p-Wm3H&a_^@FHupU5x09nhR(nPd+jJ8)b4~U4M&-^n1NY)pW`-T0Nv1J)2NLIY;n`QZ)e{U*_ek+w)2HsBu6ugw_ z_gk!z_J3@a6FiNm*%ih`&d6>h31ij+1hy$eXiIxat;ovO59V)?krI=TsXxu4QpcRQ zTIAK17Mr$hFUwo~Ka3gjMGAbeQs!(ODMe z{eC9@MU;L;?k`-IFRyWYN3><3ht41$e16xJy|S3zFmwkbtKp=4Hpd;-vPxb2$$G&( zlOT*7w%NtOYoDSswq$PiHenUKhMQ87W}9wK#6-S&bbi`B6o-*U`U)+Th)?AsKYV@Q zU8f>0MGQZ2dG|j!=vsCKCyCM>T&?@Wvt^znHPSyYm7cl(G8vc2s+RyH3-s9)0OZeQ zD9sz6G1OJ#&887CAOTOl>`%AGQ;&N7b>{oQplN5lP7zT_Gwm8r1G z12f&Jq3)QmWBn}T5WI+4T<(Y2E*tnGMPr^cHV&uM@v2TtC8uq*o|@$6vaY=`wbLIj zoItpTo1zX~EtAPERk?I|0pMj!JP<)`b!JMHcFfWXx*6D5|X85l|?Pe7U>BqS{A27B@z}GET41mG=h4*8_h=!?Lq0{ zR3?f2<#$szzLJ!YuwrQL01-4=m-U>seWNgD-*B*@A50g z*RHQ|w%hS=T?eEZAM2G*Uo)~!?cw?-H2p_d&Vbp~gvY!4$MfEeB(k{G-92$+z1wkC zoVCIlTqFVcv4kOXD*flrqQoA@V$14^dsLriw{OD1L^i}*0P^{8CKxa_AVO*!OhH~r zVSp$N0KkA}=`N>lit5TnBbT_@B2Hup*Y@j}m?AK|9`O&$rP;aC^X6@8gpji$)wShH zExd5JY&Qmp)an}m1t-@lYhpO^{YNV+7%$HtR&RHDg`D&lbtFvQ-D%$>89V~+Wldk1 zGOf_K(mKIz#Q{rR{mPpHb!tE_B@ar_R5M!hm^_|KAOve|Cj-kW$*-zbrgbalyK&cx zvFHhV-T+PI@)b1|ZxJG23qNT#6eV>SUj6WXAZk8gAr1i`nCuo9|2ilA=IyL6_gw%{ zEcB+hTwGX2$LCwBS<0Q+Y?|)(=%f3u{b48+7zq*H(Ew=WB?oaK05SJmqcjk%fNIJ) zOY%1%R{UYZ1zf=sckz1xrthDRm4Tj1qBH}YYmKNZ?QIhzhOeh?Pd`if;HmT^`)rI6IXGce#8=mrAPD2+e~&$YuJQDCHz-lRV8tRa+4WcFOuO5?6g ziC-{BARteG`)J^(j8-j}zEwJDrco`}ZO?X~0%5O(FkE$r&6vY}G)Xs_Bt2}+$C2kV zLw-kIcsV-iz)$5#2I$#_LNX}BG5Jb)r0KJ-CCgn~>=WW^bUW{YhnUscr7 zo5l&f@j0%R!)LUBX`=FUSi6TUY!v!rz%G3q^2$>w^=b6oY7>gvRiX_ALx{~Xm(k;e z*UI{>k^}>DtP<1R6csg25G}!B)VkQaV#9+P>}&cByl!3)GfpM5`@~|U)d`}@YPFec zbto^O*qk8s+(h2gQd(heWjupg4iv~vIzF!Zpzy`DiA1*N;&Zs<3^XjLW!MtmJZmm! zIz>#Mxue^1M656dVe1hKb&9d2T)(_BNoqtqqy#-bp-g zP4qPVt>dOvC>YjUmYRERFwW{oQwZ9d!FJ$uSz&nG{5$O0`F9-)HC{4sP`ha+YO zJ}21B+DsQYjy{9fTTzG#T`Vk^EyoX|MX(_6hZ5@0U~;5p3S8*##+t1oRS4wUcCO}5C&@;;P=8@bzKQ_bawn^e|h!o+M}1N^2tWY zKHsY zk&-`D0KH`VtXrz2a4X{?X9a!u+5qS-YJIjVm((aeeTr?^!45vppIS-x}l52o|{E*VFPZ2Y7{vy>jP=cMM#qt(+z>auGy zei>(R26&7B9+uTn^_y22jWHuII65g6snwf_!y{{lGkvGvCeyisK}MlyoLWA-04`Dp z>Rxb(h&gZSilPHpd_K11uEN$-V;M%C6IO_E7h2Rw|9C4as_(mSv!mkp#j^Yx$z8(0 z?S`V?Qg>{*Mtl*n#7bD)pOh z7NLMdcFnZ~kXJqEv7%B_Taca(auYmhP1-tLVN5T9j+&x`@puu^@qaH-XZ3 zwzTfdR6=zT`TQhOmCUg=BryUFh)dE=Han-5y?KvQCgcDpujI*-GVuR?(jVuYn@fqv z=lbYSIB^LoDzc(#R7okNieykh6|73p^=9@+p@Q=zH38j|W+>HgU&q|zCZ$AFLdnIO zlEm|A+tEDBN|Tq;*s-k~@!GgiN{tuf8}!19h4c~1a7VhbGW{s%8N#U1VRvp?PPT}L zk`G76vYBRtNjj8>M3z1=XOqDI6gxqxn1ZX4HTcc@ML$w~_H!Nn-i#Vm6@BnrjqV*m z(Cgtt_AimsyXu< zjHT4P{dN(4^~)`o`;PYw#<63=_}NeUyC0dAG}rXKl@ntuYqvy)FhnO>;@b0FLgGzS zlsL(?_V)xfG(_ph@{*#S_qu%5Gia(Y6CLh z{gLq@#*;}_mr@m+#I!4e%W8Lxz(z832uGW4h;ug8Lv1Jx#CP_3Jzp@?`|*fyk%T9) z!L@nO(5$6+e)xm_91YvUA$K?~<6Sg0@_cum|iA9ea3zxe|+_&u1-#sWQ{bc_b0tsfy?fzK;~|KF3X>SsK}&2NSLIY zQu<@OQ-Z(_A5uo9AY(>WE%hmX#rmpX6-E*IbNOmK$Et!2;J3TYLLf#+Ui&43QF`yp zLB{Y^ti&@UCP`0QV-@Q1Y8@pfky94^#?E@V66ZZsffSk=U%4U;uUrsD)$O8Y^LdB5 zC!8=z`RG%Va|IWGqa&eScy(*d)MctImdAY?=$w^&2rC$8F`mL-F5$akGE=Jx3Mm^B zLLgqsO6bClKUt>#h3o@QQ^|RUsZ=}>lVT$RM8_Anl}Zq$-B9XlPrABX_DluNdAtfG zSw1}Tr7+$*GX*95V1uuQA5d{UU=Du336qq|Of)_oilE}_Ch&C=oxhh4MylY8e0v)xl=XR^+QgG=_aCtRH#Tjhi&fcW-5ToUQeXRRuEF__RN&N? zs<3^44|jb(jE_!ALj~PDf|Qa|8Rr>(?48F!?PIKL=!$paNQ=DjMcoEXBb zw`AgzV?(HsA03G)#SF|GMvQDXl8UcLLsjq-R_S3zse%_%va+Ls@o3rY&W6BNc2G@Q zk;WiXht$08G*WleMbevWeR=aj0!~hmpEeI^Ry8 zTZzl>Ek~cN5zIL^6?c6v2U`aPJy#MElkX5J-Ju?Ehmw>jSiCAI2T?ubIgI1^HoAaB zbs8Ua|1ND>G)UOAvmhXk@GT@F`83HGzKn4*qZYD}rl5EjErw@w-XI?*e((xeoHcOD zE0mlbtU$QL!K;_1;*CpEv8#6wAld5}Eaex{FbMCC8DZE@qQBj#QP| z3INzFECP)oU`R=1w3x9eQc?#>+D_D1#aeQVoiRdVxNK|vwotoqN9roEyCNf4!0qV)Fo(dYEE&I9$%4_c}wjlWxYhAdW&%)-(Tmjd017jIgi<%b2tQKQ<77q z$Vifs26HwrHk6dQ1u4bAiXW*P_GuL^dbko(->Jg-F#-Jf7nxXcdL=dP{D$vm^9 zCn-}%npW- zI#nk*T*aI5yO~qxqf|6@p^V{`7`wCz3prBvt3PF7?F4>lhM)xbd#xKmGxBZeDUIOI z)dovSxG>r(lvdR6vpB=J?oO|k=HDjQHB<%fWaHBM&d0N9ok5x!MS~uvpMpyi(JzbB zciN;BHq*|8fJkW*+sHDKlGL|P8<3KD0UBcJOm%CmvWlEIBNw6ANZqCPm!t32DCVA( zg8Tk62b+h4yfwmPZ))L4T}#SZkEEhp(QNIfOYrTR{|^?e+=xuB&KL}3;fKHYJ+A-U zSuM%GO|OYp1q<2uw4AEcLCxh4Yvh3`S447SKDT?4xO#A3>t6L{EZ}}7_tP1*hN2p( z^0cAzBOv?9&KMajV%u22b`dWrSyHNd#v&)psS9%{Z{tCP(UCzc3ZIUdEBS zK0yR&1()R1p5$aoSdXMiix1%OyKl#aB0rvcbq@MwI{3pce~RDz{uZt^bUd=^oo%v6 zj?^?dl}2yPayCpYR4;E8cM6YwU_&*;rm9H75=rqp!S2)?5t=?rkRKy6ZTE72)9*fh zmzb+a@|dobI$%TcAfUNnTD4NnllmyZGCphhEy?R!tB>n>sg3B_C2=!m>Dn)7q)ud> z!xc@>c(n>=KUt2HavxsdNZp+CQ?Z|`l-9Zts1tQisQ0|8xIXOWT?cT{6<@@(2_sNb z#bp$(xCGC=cMG=f*^jI~?51un=Ni^3u)E+`UCEo8Y+QFn`)nBkF=-lXqsmz@+#nV51!SVsrE&1lF~$YX^gtYs+k0#je?GtIlw#}=iEdqk$QJ;_Yhi;!dk zlbR_q)B0H=Ek&bhO3f6xiPW-4a2}C)HZyf58|n}c#`2ZZn_dpSl8i+_A|j2zDaMnM z`|jlLmXruWBS9*iT5E(j4p?7}b04d~%s2UUV@~*;^{sR)JTV2OT!z`5@XLOkOrai0 z`MK0)K|ujmKPlUCX^{36AnJ6uTMocs!2;ru}%L zGj=mcX}VsW(UoSIc7`B44C#pQMLH!swvR}Od^FTw#A9+Z(R$w6FJ`LIHesssB|S;{ zl@wq}i69&*5FpouM-#4{00249NklZtO`QAbthR0C3II9Q^*L_~T(N<~g0wJfHR)I?%E znTptCFO!<7r=(F${bmSIWGI!@ha6Bmnlx{p}M^cVRXg`0Kv?BuYRAEoTQ5i)# zB4QCvJn5J+DmA2Ij+rv^CmRw(z^HM;JxDF5=k^**_11ymXz(!(49& z#-t7NEo6E3d_d9eYtzQ^RkSh1pa&S{2UZM;_G-V@9Yp zD2UCnbrI0hGQ@GXoIOcR1SSgdg1NS?ftX)x+TI9AT8gqC>V@IsGs@i?rTSKlX>V6y z?BW`PX>VFLDu_2PNW(Ic)Aj*DRBB;4o*y77wZ(k8_QasB4N_vt={W%3{qfJ6y#L-p zdYzDxEBG~9y=6lLk3L@B>$%CR><`I~fFY!0FK2fupNOf3olRna)@srcyp!iwV=CjI zwKZIN*N+ubg1GP7=~#Jm2>bH_?kA%77k-LZX`MusYtA#RBdKPbEkf$C+rhPeD?#xU z=~zBFfPFm!uHS{r+61U0JW`ucbbE?LAgK}XjNTqGNutdxj$+Kp2#%dw<*IS{dmL;V z=*LHN6?pLL>DW9ffU;E2U$L{Qaq$nt*fHaeneBu~${o_=73my1zU1%aNZ((B?E?c? zI5P!{C}wUN9^_Xb#N`@hCt-2Jm9)&=Y-$m(2-G5A)HsdCX_T#C7uC3hRXBc5HAXF~ zMzF@mQMe$U|3Vncj}6k+#Pz}1|J1`|`0ng#oNQ_`HOO8jXK1)j?YEk&#EwfVFZ)8(E6EA)8&ppZx|cIM>9fL#u?Mw`vp-!-B`w6ErexN!-nwN z{ceQ-d!YNGXIGT_M!3SkP&!slnaB8UHC4I@_7(WCjD+;}pJd`Q5>!z(dk?Skh{+?T z&Wf3_42hUzVvq~XWJY~FcnahFv5M)u_>eG35nH5HQy?XFn@5GPepCuxxH`-a{zWl- zc{L_4sK#l}SK;$_mSbNJKUPl+;G+{#u==Q=RSn~jx7*zU0g+Oa_FiN3&MBnt(()RP z#?k1#um;)mUD`A(fCZ;Y8wp|S(12_6)r(z5?-Y&3HSD#W2sss95|gAwk&UL2O^OlI zG*a&X9@E&PzTF&XV%RZpl47O`63ZlVddeM*>6t!CPpSMmM5^n5k-s~N(Ti#5n^%P| z|FH}i#SXR(@#Ev^DOf^DOAn@mj-mQqsgbg*YUo01|8#N$jL}=2Gsq9h_1?xs8W&Vy z+MF5;TUCuJ4m^E&bO4WjEzC58!hCj5iWWh#QCBc}8)A~gBo$7?G?nob_Vi;YL-pmc z*z8|!dErog11%;gletOh9|k{JUm2>9`+EEF?%8RW%XN>#RSx>E#6!&r ztwvJucXOW`Un73fm8N7wX_wkKCdm0hAv{APU^Z35VN?x|<{YAPpQykMw?(NM`sfiG z#DbGjv3gPv2lzR6Ig;vnpI$JU%QyTOVjug9uPoP&|5jy^IcL6lw0Qw@x&x&;9(@D>C~-eGK!cqO-n?4 zq@hhns$rp|#sw5(52cLXfnPc!6$=^Vn%|4A{Np~RAISUF_}cGE;ir55reQ%WIWB~y z(?Zxbn8U4{1Suw#NUZ#B7*)K zYLH7iQz}WRFxQ7qCx!SK@eICb>AS=)r>Kvr-Aj$@?4xnQSHvV~Nvf=-TMcIgXT*p} zANAE7(j%uOW*iq1CMgOxt{10U6untm;561yHQdvm-m?8ec>SU<(&@N1WCaQ9gK8Z2 zRu!(ex16>sA68Pj`glePR#Dp8OW&-jfag(bNXtbpu3~o6BG4QJBpoTpaZ(*molufa z2BrOcPB9s{j#5AENW(bwr1z#8`Y-WZPR!lW&rh{2fS0dI!)6-0B`FnC`mf;{Ys#`K z7`<5yH^dW@Ca;fii7AMaNKWIqtvR1<84@Nbr<60<-zY(F6GhiSA*3C}sjR9+3xldB zRZf0Y3K6P?t0$-6Q^v<`;+tzvls+R>)a`5B5yLFb?B3Pik42QS7Sjm7VI&(zHk$?6 z(=|LQKV@|UWl}k8=voNWNk@_bJWpB>|}^?XV8_PHM4T0Bm9xRJ!>Y6~rRX(uDn>OL}jE7j!l3B>FK_OKI4 zOd=^wTyL+CI7#t|`1!{0Q=0L+Ye=0X2CyNO>m=FshA zPNqEd#bTF`HjD^j;R#d?j}2ib-)NPod@B+|HAa^NSwy93OdjlBh4 zo%W9iNm0*V(vb|h`jT#XDWxMiOb%MjQ8wC-hLMyC_(|{_jyzY;+PkxVz%?_xdT9t7 zhxxIKj><(;*{UhEE9kG0+(T@quEE>=rEB~VR#N3eOj@Av7}oeiT7{>x=ZxmImi_67 zV7Q>!_x95^6h0;$8Iv;I%Ctn?Yxd1}qEtiISA^S6kZ&~-(#8=XzSY89EIxvvoH`)F zI_ae@qY=qzTlNVr<&FZ&=$@meYeTys;KI#^Vk9H&Yf4E9MS$$0 z2zpW)8b~4<#x^pNCWJhGbvLETN9l;4NFNfwN=irT`C0JIY*YIv9hHSWPaQpHFLoVU zQd1Ab5R=-k>`C%rlC*Rj<4A6Yyq4Y6q!a7c;Bo_64CNwxh%!8 zDG1Tn-eXUMZ%H-IYUCF2YcUk#!*rG#v?huP2k1CgT!nBM$)_fQ0MFO719y=y4k1>h zQjH~fRc6xO#aNU@V&lR~nz&iY1?kKA>6uazUJ(~&D&y}J=_EFySH)qCDypbbQ;|_O9rre+fh_3^Aaz@5MS}wp?DqT+TX=E5-Juy=W+( z{fLz{Tpl;dXV31(=driI$LU%Dyn1PhD<$pX{I_C0Pf170Ph@1IqxSfQTt`1qgQFxS zL8~>z#xcsiq>(v&4$fQHrK3w)cmIS*s_xQ`-;!!5ky~yGLVO?B(b?TwRpMIf{HwQw zM+{Q$bcBtP2SZ%iBCR~i$TPW2W?GphbaLgw16<9JqJIWgdrRLRL9R&eGdB3*YWLhw zMFc@UU5(`UX>qM&W+JI-#+o!Pk3o{#pCfYfp_pny38yra^Q~Q!%?0AvF-oZ>S5XqJ zriWXVq&KGe0&J8WCQ2rgMBuPelGD7`Kz(UWjY^%$>$jdXr#flhJElDbud3d$*tYjW z8~lykxb`-2`?bg1B6*~s66m=oDD}=!UA(%gemW`%+I=C>W+cp0ILjeK2}#S8^j}wl z;gpVsuHg%bK1gXKs&Y!k+c^NUfy?5~KRt!th~r#08n-1$N4YGvised2Y%j{YD~zZ+c91A)4kx z2}OIYv27k=)T6rEeRH0M=n&VbNnx5wLd$Z=jjLL6U0hAP4pU;w-4{h4 zcAoS#BtxpC;gT9;@KZqqA}b`tQBAGVwe(`HCR<18i=#YU(qqq*ZO+uuP@YEw zUJbo%4dbgz(Y`vp&Q_|1?_)0zsrcCw%!8Ft9e4Ngb3`qO4^B>@>L0-N zK|$=N#3T$7g!fDX0uv{4CdL1j6_Nbs=w5@K1|0Dm1*48Jh_4HZ+d#k zAG#DtH5+a|O}$O)hl38p{T%y^q*AV^aaaZ&l^myz;ce@v7qqV?APFwWogfL$l?c>v z)j282g*j3xX)au$PDx)IN_6S;R?gsu88b+FVVC%LhcXf!J8-zdlm0Sveib_;zl0Hy z{w?W?U&GLM)EudvWR1!c8iPr0|pTrxQPp2;$cY(wtvDi6yhiInGt*gHg4ev*_wB2>Hqih$3X z_EAZdx;*TljO7p!SETFSRIhn_KPT3TfXgWPl*?Ag^^!!ws)KywlveO~IY)A}uc3Z} zuSn9hU3L>PVs+j2rc{I^q!rbf%OIcZ6~g>R%LLiZ%8 zCcrrCVPfe@9>TOX)Z3{&+HgZQs|a6f6*T745FqMu8=4xILVPY}TdCKmIK1tiRbOfm zd8N84D+!EgnutOYo+J|zTDnM&1S82r5=#ozq8zHQeK+uU8KpZO3sb@g(wOY%(?4z} z=Uqv7KB`C#iJ+21Q4)@FutDTOvS9hkm{wA9Dd(}$j39p_d5}0N`Mov`M2K`;g5>Y| zo?8`!trNfMbZFnM~ZcU4_pJSP@Rex_a2+5uyQP~E+O4|7HA2eWI_+UF&8 zO;MPulghhW^Wg?FjwVIPrX&feA5#&M!JMZhVNgv(N_yU&0t)nJ+Zx0DNlZr~63IhJ z*{`{Oa7c)x)CehcGh6yd5g2{>moM;IK~0&(+BJW*p-mCs^A^S)>CqT`Bsb$ISX8PN zqxXqwChQ$jQ)_!oZT^;6YN2R_4WVhsNU8dd2uUB29m;exDN0>=7=Mw}uo)762@jVyT)jARS3w&6aT#@k71d{++XBWzy-J&Ic!oQeLGyyL(yem% zSDFTkfwNrx=O`1&X$RwW#?6eMk*3x%-O6+q&(oJ^MP3T3j@}xI3T_ASHtk=FK&MAQ z{X|jngprU$NWIw72QU>Ojpg=GrXnP*7!d3fy}%HX$Vt6dlV^x(ZKEqM_N8`=SZcoGs3DM*gcalJs*dDLz7RcOf*a*~uWTN09pNrXge z3{AzI<#nr?sfNa$r0-yJ{Loe1XiIYKNkf^+p48^l!Fzb2{qAJ$SbJlitEI|7c$9n0 zqab}bcRTmDk*qw@lG+%d$_VUXEaUHjP>25i}p`jU_|twfTM(hNrPB2AJi9;O(ov7+fwBBg=sOp=nMy2+k2gpoco ztXoHggh|TBvIg8);oP7fjptj_dc{v87(9gTmm~P|VdTz^DFO^YJ zmkjliy42WMA~&j$DVTk;9iM7jLFd@ewGc1_q*PH|QSC!P`)XMl43~qWBz?{L&n4+d zM(7_)MMyoktZ3Ow_A=t!)Il>o{pR6 zB~?t)jk=uFt^&3lsbumu;`kG{{q9h|)HQY2W_S%{oOf*!d^Qu7E+1ZD_JQk)1+sYW(MX8K+GA~~hznA|p$mq(-?xf)V6#HW2j zw(82-R`WDv;-c*s3wj+=9Iy$L42_$Y=n!MNA?i`6S6-sqV$iolYAPCMm%djjG$Q+eHPQ!of|^JKlBvni_h5Y57!d zFxKmiM_x}gN!i{+ScbHu&c+j!&M^cgax-M7Z6np`iD25rjIvw&la)5s24CWII$>krJV(eVu1W$6PORk;JQWMLvd{%so6Z@~$=4>t6c3 zdjvy3CRMFf`5)O&SRntgBt_?{fq$r~5`bZ^AQk9iCC@;U6;0z~l8<=iq%ihaW zV{gTbk|ESh)SXN)U0kVo$C}@4Dg-=)JW`Mi#S2ExG5f8Tij34PjEznNWuBOty`m@K zc;uw=+0ar1jLd6LS3U+|IXx;;6>}w_!QAf8?Y>Nb7IH%;_%$%!Q8$ds)pAM+iIyLpU6=8~9{A4PQuMMGGIyu7Z;A8cr21cbaE ze&_IVZeuWxID3&#d^A##P!`ooDw3T@imId`5s*?5la7g`Xw>c^>KQB2sv#kgs=KoY zCO(K#U0_~>rY-51 z+N!#RXHE0cZ0?JI*nWK^A=hilsA*Kke0o7kTGDwsu4`>*Ed<($qz+eHNn(2Vj4o-# zo$v0;##I!Hw0}7<0(1S)wNHu6{aqv`^RQ`r+^i)tvuzq={Ef72_T#s8jX8d(ZT+SY zf3A1L{%tD+;>kw$Fp`c*^}E`Yf>POaWSUnhLXp%jLJ`4;T;#4<;O+Zl2QtJY!qG5^ zQu}-fLc52ANXqTLz8VDe6~uN8YFHXtRUF=+t*}x0L`)*6LPkkqA~hXTl;ovo_9cZW zipZo^D(ZZtI>#K78CmsIYND<&+vYbOa?dlwsN;(2EGB5*MK5;1Gs#2z7Xy1^QAu|DKj_F*T!()yiMx`c-40W!~(=qLf2(_)_=66GUrVQ~NmZx>u zpe~~*6-zc9kw$zJnV6_^6ph_Sq@!mpGBQ$+Hy&9hLGh=74y zCer(!kZAxcnS#n$Ug1Y!#US=3Nx3>w7kmyw-EPxch19nG>rYYK|B@f6DN(vesY7+8 zP#>7OnwjHD&34_dE#DICit#v_M`6;I=iYg)jK?)zJ!@_a3|5Wd*xWq2=6RZDD+xtC zoJ-cjAw>K}M$(a#(2ufQ`ME(nc`Gn=tXFRHRGKYGrSK&+adiRE2gH7CT;CHnvU7p`F6(q491c?k0i9_%j8JP(Sg?z0)7n)%hvGo@r9hm#qHq( z7za{T+adNtsKcR33|qi*ew<0fa&!q^HYxX@f<;B9Kf7RFb5oPvWW&{669{ za~$-_b1-F$A7h4aO{|1Ola8-d!X#BvQi55tW?{jC1zfIWA}+h^vW~BXErCVAB2W*3 z91eP3ewrUO960`TeFWo&`ElI^Tu)1bqMa-xOj21{S-9q!YjEO;C-OU4b;hkuR&QHe zi$J$Ppo*%VM$W3JPHA+nGlqmoO2iZh1YA|GGgjD^*&<*O=v)YNGVQc;fon@^5wHjx zIRciXjvPaqgGIn1(1r+Dl4?V6ZPpe6i@=d1U`gu8F|;{Y1S|q=h=3)jHU!sZZ4s~t z9616BkM14$Eo~0%i9j{|WQw?oO+~eXEc)GM@-t+~;LN9K8r6&ez9vIS(hB93UBLw^ zQn(O<%GHuk&P6T)tWQdk)Tt$PNVaP%l*#r)TCqG^b^-T3AH{=QszYS;)l2=j=~Aw) zl-;rZZ6bsBmpgd;^(ZEf_T$RaxrB&T=;)vz!hGYyC?0y*!HV@I$*F$i zYk8_>h6SHQ@$aV{Ty<6eCmzj3X0&olEX-T%;4#*B&pva+^Iyv2T-uv13t-~N`ZNFQ z&azvUq`GJu&`LUU7dm+EEe9h8_;B6{ejI-kS7Xu#U6UZ}=Qlf6Z{!MKT#rs9(NRH! z`RHp={Ptc4eexZgPn=e4JpVTFPjir&;r*t17cg&0Un++UjU!-5s&QO8{ZTdg10;eT>;%_e=)>idR+1_B zS)3qSUr=gQ2NrF^cE^>V#t(Dw^REUmY6wY#3%UOM&In$a56qn8P%7f5#+v9Unj`ln zrLfj@;DuZ-_NaACwYBu-od&3BOLttn?X)d;m>h(ZmDXSOwY3|%W@F(6{V$k z_31}(|Krb~CXj}+F1!+7zV>pYg<7bjw`J*V-i;zqTna2^hxz!^DE1xz7Eray&vh`k z4?kx?`;_`eIXlwZSToaRau4xl|7&pv^uolrgf}rUen|3&OZwXiihiVr|VzQrkH*L3yl8j5r z9H`EXt-~m?PUF(K1ytKOQR1MmlsN683U=X1e)Q!^!@?$=s^?k9`!H`2R}mmaN00VV zMLy_K_rTrHMe&FG9ZVVxeC|viK3YLFuEDAMiyds<$xo2<=I7o?Vp@pKhUOzskEE(A z%Q5$*C-BYh{upOpbu9+*!T#x2KR{7M4Sx8I&o@6;duE3su$!IknK@Cs{sF&oOfq`> z4Pfv7C{91#kGDQ_uxu^AcuYh3>J7jd$MI9;*?w%@?clbDBiOl@tAcY9Y6+!@U0jD~ z#$+FUc)cIf#{0NT4^_yI9sJ?JDAc)SuhEhqK`x^9m5Y72?tCAQ#fbb)H;c->i9=%k?|E)=^XEU?ch33Fx1I0nYe5k=)jMmsp{VTLMvg+< z%-QpRIEOM4ls`S;g^9y0MnJWfmegRyhjzx%24+ss-A*@fLz2y1L4IYla{8-h5u zLULdtQX#?CdKSGva)nan7x4d86xW&piEN5A-~@4U8cRbEesjptzPpwQ5jZ}HgE|2G z{A_r9jurP!cTYjzu>SA*-!4STj;fM8q-SPf+z)3Paq;~8{V^ml5z990#)X`GM2C1Y z^g}f=GBR-H%o$FIV@7o8I6OQY9Xe0}V!~C&fHsdmH<_$UA{hSst>q8%UmaViH>%=z?y!-b)g+{BU7OvXV@YuXJKOeP1WO&r3! z2oHVViUY?e&crlgBEAt9>T7ugMN#xp*bRa7`@4oDOY@&_hR9K3(J z7rImIKAvtfl=E-AZ$knPm0QPHn=LLkr;n|<>}4XwW2LO96s5)Gh>CO^I~EI*E(8ao zqK52hX@xX9&O4?J<54p^`<- zHLg%RiA!9xI2T~;HtL$r0;%bYkA2d{_}HLMhVinwSrsc=s!54PB7#mBOu{ypgwGQY zT_~bhcOggI5J)KN>z`uTRy0%MW#=?g;Lqa6nscs)~Y9iXrf!nF?x-n7WG1E%bigv^MTQT=88-DpRuWAp!{fx4pK1~%2WX~hcp`g~$~$H_EG!K7-g~bRPpWZs=9AWp0nMto z1t0D@ZB8eUNygH3Hbaz?qFrKN?>O*d;rleF^F?jg3W`&9mY0a-%5^yF@$|Qi9F5`~ z$pNw#6@b@hMxaz1NCX|Q71(rCc@(i;+DozulB~%4i3ike}Tt>f$R7fa-LxOQa zW*b5^kEX1%XX!!f&y!c&6?tQVLI|7Cb}=BL;{=(18aaoN)9JG0Z1FR%gHp7}`qaTp9me6HgwBzt8JAHmE7|@g4LIaM)+16M67Gcsx zmV#P3B3F>8R9NEhmJjrAywL-EEtozIxR&iochr!0YOJynewD9NS6bYvXhg`)v!k-g zA!e%mFE7~*<3U#@FKCX{vXb20rd>9iC#N`-B3&19hE5P+EN7o(Ar-+ip=k_UCQ@XS z1A;qX)QChZ{9qYoe}57J$}VB?(!XQSh-rw42u6OcgGe=9mHD(SVn8RjJk!M;O&-ad zXZ;<7KwQM}G>7SYU@wOV)-771qX?1(6Unu7j<6UU)|UOi+bivuMq<&I+?P8{z^x$=#_apEPxyAyPce$Vtuq$-~&2JQsK0F&%*v^P&?5;K|1yb~vbg$C2?} z8=mwm+UVL?0{xO`!+lftOu8j0ax193{>R5mQXcH!TDFplk{g3u5=5{nc;d@nXjnfB z)^4{^;cUg^QS@t~iC$b-6h*{wiC2ETMSW9Ws-^egDja>C1v`>q)Ky$sLxMqTB;5m) z@kE@^B%1ic`Maf|Z-NE4jFjb#+>B2RrqE48T;bcRfN{g9l;@abbSNS>_xpEkRN@1V z&Gw>Ef%+^V(gh@7Xgr2~s}|>aM^;H)i+OPgGqupcc3>|Heb;Pwb0sjeKNaf3t%d=@ zr7H8Q3kK>DDGT}cxIP20^zW;1^yqO^S-sJ(Z$E@y&5Knooi)E+IR?ZJ$#F22%2?<0 zNxviRNBSsn0|F6<$#h)IEwC~>wG9tGUt@?j*YR|}kCv#D8RVU~>k5h`$^nne@}g*F zGw$6j-$d?!V%m6G;~t#pa9wcJ`prLO?TV>&4Ul45j-yZ9Ll=kDR$d>m;~lz0h~pSP zjCIrUIFuY-V`1-`+xez9gcDgOLEYQ(O(eMMYv4noblYev9-U3`tk$T?3(0&;oE zU&^-|;+k|gy5}cxPWWr`R` z2i1wrlJ3^+=%xEVrH4{Zx)2hX&a@~x$E%t|q{LB*K1oN_lnzPbsbK#DI3DLA;Mxm~ z&2a3bo-K^78&NzkT-$Jcx23+9lCb{lg&JJb!-Ahovl`B)Eme0*)>B$qih1+q;r{#Y zNB{o)d5~UK($y}zmTbUj*xa=yZ}mx{hd7v~Kvpqb9f@qHiyK)s(wKQy?O$>oQ*lP2tM*eT}UP74cnMADZ945d$WX z`bHF)FI))*#AR&SZO3|A3U!^u$r&{)D~{w^ijDHr?%loNf6c#53^c}oNu(O%#C+lb z2I%)|Sg7QTscSP|Nu*e}bWshtGY^_Hi?kCAm_(|bO!T)sOo^7d&Z3VACI(s(13dps zFfm|az{Ei7#ehkqTJPMLJu@+2Vt^PhiIlkvObnP9Xw?|-h)DS~|G?Q3CSAyQLQ(Y?|+4S5#CWK0cn#sPw2b;VUs93+w4jJ1)^VRbg&|czx;pb*C}p+71}lH{5WP z{mR0v>>q9uDJ>EOy^Dx&c-xso>dI%dsHg~s4jtlEk^qxPT{+t7-b_zVM{#j6Vq#)U zB2|Z#roSj6#H-60S#^t|I{=^XwW_Kvc=E^I=)o&U&P&csmu_88-6m3jfq}T=jypWQ z7E@VSX}G+*y1id1N_3jm@K&lKfwsl+>bC*}TE%~R02;p{qpG|o<5!3seN^6)J_z^f zgWA?u+=b?rSG(%BCvB^*RouDGI^6AhOO)5zZ_fO?Q(gfCXN({S0#0F2w=jP^O^XAPsefqQ~#hYE`;>C+b|1&c)J*w--kt2qvo}W+t-%Sv4 zOHNM4&Ye3Uj?i7ux=Be%!Hyj};7R-Lw%71|ZSaj7H{#f_V;-$vmEW{!lOe8qvi`L} zwe}>1coL6IZLV3f2B%J)G7jp7<7?{gu|upFF`(9QR`)f_H^H~&49OEO5qbb0eDDFZ z_B`po4ydH0BxGe}xn15ZPD%?+R8-W|6HrIBKs_0x+7lO1P*7m}_N0AHv^JRP@dVU= z5n4~nJ8|c!;X&=I|DNJc8?C&&+~9`X9ltmjZ8Vkl1T=P)*F{oKK;^{+Nf#w<#9h#u z74C#XPe5%t*N*z)E;!3;4|&4HYRx$J&Xu;WK!VDqtZdP`EZ#pj&j``1u;89Ra}F2H zoyt3DNW=CuufmJ|-w@o6g7DN+PeCVoJe8MCRoJir*T1z%PMkP_*w|Qf?AX!m@><~H zqN1atjie9mwl4yslOQT8%FwB~TV6(kbLY+(ZF|yxwXc&z?JH@8yX{LKqw*TR!Z^DN z;zWf*wJ*JxJD|RvKY!lfLe##yiffg>aN&YMs5*D<41Xs1a0i^_wT7gVa+lDHu%A46 z(wKMQUYo`paF*A+E9r>4<#n)$3li=^Lqpvbnbf|xK$TbfS4QZRy3C3#CvHWkUk?0= zmZC>DCQOOwc!lNbV@RBETwEMNLPFf`zvl1o;lp29Uh^vayzZe`1!sBnqdDzgt@1*=KAyJU66J+M;ocMcIX9;I?+K{?&1t{6<<)!t6m+Rg9i_8bbz@< zq}-iU^L-NoCI(ClG#3M&38&3%)husfz{G%wfh)v7BMoFtbrn*N9>mIxpW>%Kn~Si3 z%S!T!@-l4Sx&g<|7vqti{EKm?M(>|IbO3*T{Vk+1AohU4qwvtf4=`>vqoTD#C@(F> zf&F`M_;eQL%$|c_KW|i&m*VriyYSAErAR+_0o~$y;F^SZV!(z|M-OA=-;=QOKr(_mbi%FE zren&a3FyGgq-Rr)VI{3byFO1rboV}(HER||UO$MLj@#$?o1U72RUhrZq+4!fG|sqs z2_ve?3bEkT*We!+kMB*tm2v6Ak#+JI7B5+X{V7M#xm#b%{l(82=PQN*65Tfrd|S)a z>sf*-x7%&Z29txG+qUAR|NSkt9Xy6PbAE&%ZZaDaqn*#pz(*Ta-`dL&3c0!--QP{Bh z1Ee!6&kdumZ#NrFYcG#$Z`by%_{;qHNIsg1L5V}rJvIiJr;cL&OD|&U-V|JyI1FXk znOM7aBh#-%A}Z7u3to8%8@BC7Uxu8`IGKWNyAL2Xz9$vL3~beoptz_2M^X;r)ffMO zHCwl1^bI#5u1kyyk)p@>yKmyRe|Q8!qML zp?9rirlPDAJ3jspnWa8>Z`ohbuWJ}?7}^gH{^D6||LiF9j1ByDdff_ZEh@;v>Xq+d z{(^-lC@jW}JqA%p%m8pD#W-^K3sm_;;P)@SgrR-9;)`3xOc=46juzSybgvZ8_6ROW3B=6kJ1S_ji%{c7-zJ3M)+Q&oT zXjUP9Iqw-vn>-e2$rEwMkA8~12alrjgi#DkSVtbN>R{`7;pZQK$+zEy;iD&E!-_ZY z)~ZhoD}Z_z7!-mBfBpn!{@@YyIKac4{PAM8TipPcd1t?*J z{F;gqoG&WM(_%{ZHp)ozHCk8c2On|>$8-8d0R%N8Oz^{m0Y zYmE&aJ_g--4?s|G2rgYXhuwSk;UX`jjTjV8&i^8OgM*Pkv4&{_(WP5A#CGQMOBYbU ztfK9SNDUo10gD!o#Yahh#ak;sG9)A6Pmup*I{x_Tn;0@?GCBo^A&6NyWZgT(y&DzR z1HI#8;qSu?&pmphOGFUPaP3vmWumnZse0tr*UulJVIjQNQ~&a&%*Ouos|n#k@l)E7 zTCg$6Sbk0cBA7eLS8gYK&xd9G0{odxq}cgdyZBv)Bl?iI;z-1Q@Ze#XIsImM*OX(! zswDjSzkUN-Kr|+f9D(wpQiO#D7`N1|Oey9=F4gMg%}wT+(_>piws7am(>*klYmb-8 ztSmToZC z4ZbD5*d56sU8=HCUv=V0GG3u>W&7SkxM}JvJUaJbSW9?K$AL1(+r+!@t34XfoZQ|n zZMUVb8oP4*HRZw6J)tjt`K$lNO%o^M-No-=?dnzJ3VZ=I1j_s1MZKqUx!UP#!@mp; zKt4I`5e(cp5kdrPUb6x#Hhh8^ci)G+>?~x^5xc6y8)<3juv_^y*IM1{%-3bN*bJht zz1>=%Su^RytOge!38WR8XGF$_AMNSb1$H_fnpb$RJt?=h`{g>3I0jhV}R?Fe zxedbx_eFG6I5N}EVBe86R9pQ}T2@J%F$o}{fMRrBehI?6$1y>tdmioIJybi0%tcBx z!NEaTMV<0LnV9tKnKam}J_rg4LwuMQ&RxhsL5V{(QBaVN+`JORM0KRm#yyYxZxeq_ z5-FWXHT*OMt{$fn0k0oD25&B#hh^`t#_gjA;BW6NL{&f}M$-)39ziFW2$S$6D52G5 z_l|8ic`lEl%1;p);)g@LsO!x%x&E}A_P_QTyuExQ)^Gk4JtO?EX7y@>#l~a6H3>%f z_VzR)@%yq`=V~LeF_Dsfz%Ph;Cf@I9!0}o5Aec(@ z5WB;NM@r!#qbA~qcTUCgPyP&lqRz^~)9tC}evcke?%yrD+Q?{$_N7bigcBvKKbB2gI{!3)R! z=rVLPemrLu{<7$8BrST4_bTo9_h(-~ALb=%O@301uEj_%P*RwWg5pv{$Hdm_thj^x zOWCO6_Ur5tS+c6CoH~~y_>ydQe9zwK8P~P#&29_zSo)_zvdxv0?>ly6f;oE)iBv9f zDT>tT?%0+$Z?#8s?1XT}_K}av30@v8t+F8@p*Lcq+h^2Ho&Lp)URpt=cQ7yE`cnxm zsNkjO%#5?hIQJz2g2U0XR{~SJI}X8Wx-VqXhc6@ROGHFQp+}GSMus2N(O#gmxB!Jk zWe8(X%7BK+4T;~J>>Q@D_Ca`9DDToyq_b7y%&AnI&ANc7n6Bv4s|Qoaw;oYX^VWz+ zwU@~>$7y1~#6a7?Ks^_Pw$Wv?mnH^G474W - + CombineHarvester: CombineTools/src/AZhSystematics.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_a_zh_systematics_8cc_source.html b/_a_zh_systematics_8cc_source.html index cdce50666c6..4c2345453d5 100644 --- a/_a_zh_systematics_8cc_source.html +++ b/_a_zh_systematics_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/AZhSystematics.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -307,30 +304,30 @@
199 }
200 }
201 
-
- -
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
- - -
std::set< std::string > process_set()
- + - -
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+ + +
CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
- +
CombineHarvester & signals()
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > process_set()
+
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
+ + -
void AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)
- -
CombineHarvester & signals()
-
Definition: Algorithm.h:10
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
- -
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
void AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)
+
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
+ + + + + diff --git a/_algorithm_8h.html b/_algorithm_8h.html index 3bf6360fed5..adcedb42c0a 100644 --- a/_algorithm_8h.html +++ b/_algorithm_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Algorithm.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_algorithm_8h_source.html b/_algorithm_8h_source.html index 07bec018cd2..0855737980d 100644 --- a/_algorithm_8h_source.html +++ b/_algorithm_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Algorithm.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -183,15 +180,15 @@
75 }
76 
77 #endif
-
- -
void FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)
Definition: Algorithm.h:49
-
void erase_if(Range &r, Predicate p)
Definition: Algorithm.h:12
-
bool any_of(const Range &r, Predicate p)
Definition: Algorithm.h:17
-
bool contains(const Range &r, T p)
Definition: Algorithm.h:22
-
bool contains_rgx(const std::vector< boost::regex > &r, T p)
Definition: Algorithm.h:34
Definition: Algorithm.h:10
+
void FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)
Definition: Algorithm.h:49
void FilterContaining(Input &in, Filter const &filter, Converter fn, bool cond)
Definition: Algorithm.h:41
+
bool contains_rgx(const std::vector< boost::regex > &r, T p)
Definition: Algorithm.h:34
+
bool contains(const Range &r, T p)
Definition: Algorithm.h:22
+
bool any_of(const Range &r, Predicate p)
Definition: Algorithm.h:17
+
void erase_if(Range &r, Predicate p)
Definition: Algorithm.h:12
+ + diff --git a/_auto_rebin_8cc.html b/_auto_rebin_8cc.html index fe9d35b9f1f..ec833e42146 100644 --- a/_auto_rebin_8cc.html +++ b/_auto_rebin_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/AutoRebin.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_auto_rebin_8cc_source.html b/_auto_rebin_8cc_source.html index 15f3ff6855e..c2af287d446 100644 --- a/_auto_rebin_8cc_source.html +++ b/_auto_rebin_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/AutoRebin.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -458,21 +455,21 @@
350 
351 
352 }
-
- -
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...
Definition: AutoRebin.cc:18
+
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...
Definition: AutoRebin.cc:104
int GetMaximumFracUncertBin(TH1F &total_bkg)
Return bin with maximum value of fractional error.
Definition: AutoRebin.cc:336
+
void Rebin(CombineHarvester &src, CombineHarvester &dest)
Work out optimal binning using the total background histogram built from src, and apply the binning t...
Definition: AutoRebin.cc:18
+ +
void ForEachProc(Function func)
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
std::set< std::string > bin_set()
-
Definition: Algorithm.h:10
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
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...
Definition: AutoRebin.cc:104
+
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Process.cc:117
-
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
- +
Definition: Algorithm.h:10
+ + diff --git a/_auto_rebin_8h.html b/_auto_rebin_8h.html index cfd4382ea39..3973ff7448e 100644 --- a/_auto_rebin_8h.html +++ b/_auto_rebin_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/AutoRebin.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_auto_rebin_8h_source.html b/_auto_rebin_8h_source.html index ddb8ad4b677..a057b853feb 100644 --- a/_auto_rebin_8h_source.html +++ b/_auto_rebin_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/AutoRebin.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -158,21 +155,21 @@
116 }
117 
118 #endif
-
- -
AutoRebin & SetPerformRebin(bool val)
Whether to actually perform the rebinning or just print it out.
Definition: AutoRebin.h:103
+
Tests for any bins below a certain threshold and if they exist merges them with neighborouring bins.
Definition: AutoRebin.h:19
-
AutoRebin & SetVerbosity(unsigned verbosity)
Set to a value greater than zero for more verbose output.
Definition: AutoRebin.h:69
-
void Rebin(CombineHarvester &src, CombineHarvester &dest)
Work out optimal binning using the total background histogram built from src, and apply the binning t...
Definition: AutoRebin.cc:18
+
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...
Definition: AutoRebin.cc:104
+
AutoRebin & SetRebinMode(int val)
Flag to perform different versions of rebinning algorithm.
Definition: AutoRebin.h:95
int GetMaximumFracUncertBin(TH1F &total_bkg)
Return bin with maximum value of fractional error.
Definition: AutoRebin.cc:336
+
AutoRebin & SetPerformRebin(bool val)
Whether to actually perform the rebinning or just print it out.
Definition: AutoRebin.h:103
-
Definition: Algorithm.h:10
+
AutoRebin & SetVerbosity(unsigned verbosity)
Set to a value greater than zero for more verbose output.
Definition: AutoRebin.h:69
+
AutoRebin & SetBinThreshold(double val)
The threshold for which we consider merging bins containing less than this value.
Definition: AutoRebin.h:78
AutoRebin & SetBinUncertFraction(double val)
The threshold on the bin uncertainty fraction for which we consider merging bins containing less than...
Definition: AutoRebin.h:87
-
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...
Definition: AutoRebin.cc:104
+
void Rebin(CombineHarvester &src, CombineHarvester &dest)
Work out optimal binning using the total background histogram built from src, and apply the binning t...
Definition: AutoRebin.cc:18
-
AutoRebin & SetBinThreshold(double val)
The threshold for which we consider merging bins containing less than this value.
Definition: AutoRebin.h:78
- -
AutoRebin & SetRebinMode(int val)
Flag to perform different versions of rebinning algorithm.
Definition: AutoRebin.h:95
+
Definition: Algorithm.h:10
+ + diff --git a/_b_s_m-_model_independent-_limits-_hhh_a_zh_8md.html b/_b_s_m-_model_independent-_limits-_hhh_a_zh_8md.html index 2deeedcdb97..47f98c045f8 100644 --- a/_b_s_m-_model_independent-_limits-_hhh_a_zh_8md.html +++ b/_b_s_m-_model_independent-_limits-_hhh_a_zh_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/BSM-ModelIndependent-Limits-HhhAZh.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_b_s_m-_model_independent-_limits-_m_s_s_m_h_t_t_8md.html b/_b_s_m-_model_independent-_limits-_m_s_s_m_h_t_t_8md.html index 95161ac8374..1abd3f86ad0 100644 --- a/_b_s_m-_model_independent-_limits-_m_s_s_m_h_t_t_8md.html +++ b/_b_s_m-_model_independent-_limits-_m_s_s_m_h_t_t_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/BSM-ModelIndependent-Limits-MSSMHTT.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_bin_by_bin_8cc.html b/_bin_by_bin_8cc.html index f7b14a45b58..3e78fc39d47 100644 --- a/_bin_by_bin_8cc.html +++ b/_bin_by_bin_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/BinByBin.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_bin_by_bin_8cc_source.html b/_bin_by_bin_8cc_source.html index 4e814ff4755..07e72d897c0 100644 --- a/_bin_by_bin_8cc_source.html +++ b/_bin_by_bin_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/BinByBin.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -137,11 +134,11 @@
29  for (auto const& bin : bins) {
30  unsigned bbb_added = 0;
31  unsigned bbb_removed = 0;
-
32  CombineHarvester tmp = std::move(cb.cp().bin({bin}).histograms());
+
32  CombineHarvester tmp = std::move(cb.cp().bin({bin}).histograms());
33  std::vector<Process *> procs;
34  tmp.ForEachProc([&](Process *p) {
35  if (p->shape()->GetSumw2N() == 0) {
-
36  std::cout << "Process " << p->process()
+
36  std::cout << "Process " << p->process()
37  << " does not continue the weights information needed for "
38  "valid errors, skipping\n";
39  } else {
@@ -285,8 +282,8 @@
177  boost::replace_all(name, "$#", boost::lexical_cast<std::string>(j));
178  sys.set_name(name);
179  sys.set_asymm(true);
-
180  std::unique_ptr<TH1> h_d(static_cast<TH1 *>(h->Clone()));
-
181  std::unique_ptr<TH1> h_u(static_cast<TH1 *>(h->Clone()));
+
180  std::unique_ptr<TH1> h_d(static_cast<TH1 *>(h->Clone()));
+
181  std::unique_ptr<TH1> h_u(static_cast<TH1 *>(h->Clone()));
182  h_d->SetBinContent(j, val - err_lo);
183  if (h_d->GetBinContent(j) < 0.) h_d->SetBinContent(j, 0.);
184  if (!(h_d->Integral() > 0.)) h_d->SetBinContent(j,0.00001*h->Integral());
@@ -312,48 +309,49 @@
204  AddBinByBin(src, dest);
205 }
206 }
-
- -
void ForEachProc(Function func)
-
virtual std::string const & era() const
Definition: Object.h:29
-
double GetMergeThreshold()
Definition: BinByBin.h:158
-
bool GetPoissonErrors()
Definition: BinByBin.h:161
-
void CreateParameterIfEmpty(std::string const &name)
-
bool GetMergeSaturatedBins()
Definition: BinByBin.h:163
-
virtual std::string const & bin() const
Definition: Object.h:17
-
void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
Create bin-by-bin shape uncertainties for every process in src, and add these to dest
Definition: BinByBin.cc:105
-
void set_type(std::string const &type)
Definition: Systematic.h:23
-
virtual std::string const & channel() const
Definition: Object.h:32
- -
TH1 const * shape() const
Definition: Process.h:52
-
void set_asymm(bool const &asymm)
Definition: Systematic.h:35
-
void set_value_d(double const &value_d)
Definition: Systematic.h:29
-
virtual std::string const & analysis() const
Definition: Object.h:26
-
std::set< std::string > bin_set()
+
unsigned GetVerbosity()
Getter functions for class attributes.
Definition: BinByBin.h:156
+
bool GetPoissonErrors()
Definition: BinByBin.h:161
+
double GetAddThreshold()
Definition: BinByBin.h:157
std::string GetPattern()
Definition: BinByBin.h:159
- +
void MergeBinErrors(CombineHarvester &cb)
Merges histogram bin errors between processes.
Definition: BinByBin.cc:22
void MergeAndAdd(CombineHarvester &src, CombineHarvester &dest)
A convenience function which calls MergeBinErrors and AddBinByBin in turn.
Definition: BinByBin.cc:202
-
virtual std::string const & mass() const
Definition: Object.h:38
-
Definition: Algorithm.h:10
-
void InsertSystematic(ch::Systematic const &sys)
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
double GetAddThreshold()
Definition: BinByBin.h:157
+
void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
Create bin-by-bin shape uncertainties for every process in src, and add these to dest
Definition: BinByBin.cc:105
- -
unsigned GetVerbosity()
Getter functions for class attributes.
Definition: BinByBin.h:156
-
void set_value_u(double const &value_u)
Definition: Systematic.h:26
-
virtual int bin_id() const
Definition: Object.h:35
-
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-
bool GetMergeZeroBins()
Definition: BinByBin.h:162
-
std::string const & name() const
Definition: Systematic.h:21
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
-
void MergeBinErrors(CombineHarvester &cb)
Merges histogram bin errors between processes.
Definition: BinByBin.cc:22
+
bool GetMergeSaturatedBins()
Definition: BinByBin.h:163
+ +
double GetMergeThreshold()
Definition: BinByBin.h:158
+ +
void CreateParameterIfEmpty(std::string const &name)
+
void ForEachProc(Function func)
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > bin_set()
+
CombineHarvester & histograms()
+
void InsertSystematic(ch::Systematic const &sys)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
virtual std::string const & process() const
Definition: Object.h:20
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual int bin_id() const
Definition: Object.h:35
+
virtual std::string const & analysis() const
Definition: Object.h:26
+
virtual std::string const & era() const
Definition: Object.h:29
+
virtual std::string const & mass() const
Definition: Object.h:38
+
virtual std::string const & channel() const
Definition: Object.h:32
+ +
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
+
TH1 const * shape() const
Definition: Process.h:52
+ +
void set_shapes(std::unique_ptr< TH1 > shape_u, std::unique_ptr< TH1 > shape_d, TH1 const *nominal)
Definition: Systematic.cc:128
+
void set_value_d(double const &value_d)
Definition: Systematic.h:30
void set_name(std::string const &name)
Definition: Systematic.cc:54
+
void set_value_u(double const &value_u)
Definition: Systematic.h:27
+
std::string const & name() const
Definition: Systematic.h:22
+
void set_asymm(bool const &asymm)
Definition: Systematic.h:36
+
void set_type(std::string const &type)
Definition: Systematic.h:24
+
Definition: Algorithm.h:10
void SetProperties(T *first, U const *second)
Definition: Utilities.h:59
-
void set_shapes(std::unique_ptr< TH1 > shape_u, std::unique_ptr< TH1 > shape_d, TH1 const *nominal)
Definition: Systematic.cc:128
+ + diff --git a/_bin_by_bin_8h.html b/_bin_by_bin_8h.html index e9e263707e9..d3bfaeea466 100644 --- a/_bin_by_bin_8h.html +++ b/_bin_by_bin_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/BinByBin.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_bin_by_bin_8h_source.html b/_bin_by_bin_8h_source.html index 57106c0f126..3a1b85604f1 100644 --- a/_bin_by_bin_8h_source.html +++ b/_bin_by_bin_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/BinByBin.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -184,32 +181,32 @@
175 }
176 
177 #endif
-
- -
BinByBinFactory & SetMergeThreshold(double val)
The threshold for the merging algorithm.
Definition: BinByBin.h:107
+ +
Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
Definition: BinByBin.h:21
BinByBinFactory & SetAddThreshold(double val)
Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
Definition: BinByBin.h:99
-
double GetMergeThreshold()
Definition: BinByBin.h:158
+
unsigned GetVerbosity()
Getter functions for class attributes.
Definition: BinByBin.h:156
+
BinByBinFactory & SetFixNorm(bool fix)
Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
Definition: BinByBin.h:124
bool GetPoissonErrors()
Definition: BinByBin.h:161
-
bool GetMergeSaturatedBins()
Definition: BinByBin.h:163
-
void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
Create bin-by-bin shape uncertainties for every process in src, and add these to dest
Definition: BinByBin.cc:105
+
double GetAddThreshold()
Definition: BinByBin.h:157
+
BinByBinFactory & SetPattern(std::string const &pattern)
The pattern-string for the systematic naming convention.
Definition: BinByBin.h:115
+
BinByBinFactory & SetMergeZeroBins(bool merge)
Set whether bins with zero content can participate in the merging procedure.
Definition: BinByBin.h:140
+
std::string GetPattern()
Definition: BinByBin.h:159
+
void MergeBinErrors(CombineHarvester &cb)
Merges histogram bin errors between processes.
Definition: BinByBin.cc:22
BinByBinFactory & SetMergeSaturatedBins(bool merge)
Set whether bins with error >= content participate in the merging procedure.
Definition: BinByBin.h:148
+
BinByBinFactory & SetPoissonErrors(bool poisson_errors)
Construct approximate Poisson uncertainties instead of default Gaussian.
Definition: BinByBin.h:132
BinByBinFactory & SetVerbosity(unsigned verbosity)
By default this class only produces output on the screen when an error occurs, set to a value greater...
Definition: BinByBin.h:90
-
std::string GetPattern()
Definition: BinByBin.h:159
-
void MergeAndAdd(CombineHarvester &src, CombineHarvester &dest)
A convenience function which calls MergeBinErrors and AddBinByBin in turn.
Definition: BinByBin.cc:202
-
Definition: Algorithm.h:10
-
BinByBinFactory & SetPattern(std::string const &pattern)
The pattern-string for the systematic naming convention.
Definition: BinByBin.h:115
-
double GetAddThreshold()
Definition: BinByBin.h:157
+
BinByBinFactory & SetMergeThreshold(double val)
The threshold for the merging algorithm.
Definition: BinByBin.h:107
+
void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
Create bin-by-bin shape uncertainties for every process in src, and add these to dest
Definition: BinByBin.cc:105
-
unsigned GetVerbosity()
Getter functions for class attributes.
Definition: BinByBin.h:156
-
BinByBinFactory & SetMergeZeroBins(bool merge)
Set whether bins with zero content can participate in the merging procedure.
Definition: BinByBin.h:140
-
bool GetMergeZeroBins()
Definition: BinByBin.h:162
-
Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
Definition: BinByBin.h:21
- -
BinByBinFactory & SetFixNorm(bool fix)
Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
Definition: BinByBin.h:124
-
void MergeBinErrors(CombineHarvester &cb)
Merges histogram bin errors between processes.
Definition: BinByBin.cc:22
-
BinByBinFactory & SetPoissonErrors(bool poisson_errors)
Construct approximate Poisson uncertainties instead of default Gaussian.
Definition: BinByBin.h:132
+
bool GetMergeSaturatedBins()
Definition: BinByBin.h:163
+ +
double GetMergeThreshold()
Definition: BinByBin.h:158
+ +
Definition: Algorithm.h:10
+ + diff --git a/_c_m_s_hist_func_factory_8cc.html b/_c_m_s_hist_func_factory_8cc.html index a8804263fb4..464cbf97850 100644 --- a/_c_m_s_hist_func_factory_8cc.html +++ b/_c_m_s_hist_func_factory_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/src/CMSHistFuncFactory.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_c_m_s_hist_func_factory_8cc_source.html b/_c_m_s_hist_func_factory_8cc_source.html index a33042704da..1f3b0b50c83 100644 --- a/_c_m_s_hist_func_factory_8cc_source.html +++ b/_c_m_s_hist_func_factory_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/src/CMSHistFuncFactory.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -135,7 +132,7 @@
27 
28 void CMSHistFuncFactory::Run(ch::CombineHarvester &cb, RooWorkspace &ws, std::map<std::string, std::string> process_vs_norm_postfix_map) {
29  for (auto const& bin : cb.bin_set()) {
-
30  for (auto const& proc : cb.cp().bin({bin}).process_set()) {
+
30  for (auto const& proc : cb.cp().bin({bin}).process_set()) {
31  if (v_) {
32  std::cout << ">> Processing " << bin << "," << proc << "\n";
33  }
@@ -191,7 +188,7 @@
83  } else {
84  std::sort(m_str_vec.begin(), m_str_vec.end(),
85  [](string const& s1, string const& s2) {
-
86  return lexical_cast<double>(s1) < lexical_cast<double>(s2);
+
86  return lexical_cast<double>(s1) < lexical_cast<double>(s2);
87  });
88  for (auto const& s : m_str_vec) {
89  if (v_) std::cout << ">>>> Mass point: " << s << "\n";
@@ -202,10 +199,10 @@
94  // ss = "shape systematic"
95  // Make a list of the names of shape systematics affecting this process
96  vector<string> ss_vec =
-
97  Set2Vec(cbp.cp().syst_type({"shape", "shapeU"}).syst_name_set());
+
97  Set2Vec(cbp.cp().syst_type({"shape", "shapeU"}).syst_name_set());
98  // Now check if all shape systematics are present for all mass points
99  for (auto const& s : m_str_vec) {
-
100  if (cbp.cp().syst_type({"shape", "shapeU"}).mass({s}).syst_name_set().size() !=
+
100  if (cbp.cp().syst_type({"shape", "shapeU"}).mass({s}).syst_name_set().size() !=
101  ss_vec.size()) {
102  throw std::runtime_error(FNERROR(
103  "Some mass points do not have the full set of shape systematics, "
@@ -215,7 +212,7 @@
107  unsigned ss = ss_vec.size(); // number of shape systematics
108 
109  vector<string> ls_vec =
-
110  Set2Vec(cbp.cp().syst_type({"lnN"}).syst_name_set());
+
110  Set2Vec(cbp.cp().syst_type({"lnN"}).syst_name_set());
111  unsigned ls = ls_vec.size(); // number of lnN systematics
112 
113  // Store pointers to each ch::Process (one per mass point) in the CH instance
@@ -740,8 +737,8 @@
638  // will now be read from our norm object
639  cb.ForEachProc([&](ch::Process * p) {
640  if (p->bin() == bin && p->process() == process) {
-
641  if (m > 1) {
-
642  p->set_mass("*");
+
641  if (m > 1) {
+
642  p->set_mass("*");
643  }
644  p->set_shape(nullptr, false);
645  p->set_rate(1.0);
@@ -751,7 +748,7 @@
649  if (m > 1) {
650  cb.ForEachSyst([&](ch::Systematic * n) {
651  if (n->bin() == bin && n->process() == process) {
-
652  n->set_mass("*");
+
652  n->set_mass("*");
653  }
654  });
655  }
@@ -831,43 +828,44 @@
730 // f->cd();
731 // }
732 }
-
- -
CombineHarvester & FilterSysts(Function func)
-
void ForEachProc(Function func)
-
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Observation.cc:66
+ + +
#define FNERROR(x)
Definition: Logging.h:9
+
void Run(CombineHarvester &cb, RooWorkspace &ws, std::map< std::string, std::string > process_vs_norm_postfix_map)
+ + +
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
-
void set_rate(double const &rate)
Definition: Observation.h:20
+
void ForEachSyst(Function func)
+ +
void ForEachProc(Function func)
+
std::set< std::string > process_set()
+
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > bin_set()
+
CombineHarvester & FilterSysts(Function func)
+
CombineHarvester & FilterProcs(Function func)
+
std::set< std::string > syst_name_set()
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
+
virtual std::string const & process() const
Definition: Object.h:20
virtual std::string const & bin() const
Definition: Object.h:17
-
#define FNERROR(x)
Definition: Logging.h:9
-
virtual void set_mass(std::string const &mass)
Definition: Object.h:37
-
CombineHarvester & FilterProcs(Function func)
- -
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Process.cc:81
+
virtual std::string const & mass() const
Definition: Object.h:38
+ +
void set_rate(double const &rate)
Definition: Observation.h:20
+
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Observation.cc:66
void set_rate(double const &rate)
Definition: Process.h:24
-
std::set< std::string > bin_set()
-
virtual std::string const & mass() const
Definition: Object.h:38
- +
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Process.cc:81
+ +
std::string const & type() const
Definition: Systematic.h:25
+
std::string const & name() const
Definition: Systematic.h:22
Definition: Algorithm.h:10
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
- - - -
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
- -
void ForEachSyst(Function func)
-
void Run(CombineHarvester &cb, RooWorkspace &ws, std::map< std::string, std::string > process_vs_norm_postfix_map)
- -
std::string const & name() const
Definition: Systematic.h:21
-
virtual std::string const & process() const
Definition: Object.h:20
- -
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
std::string const & type() const
Definition: Systematic.h:24
TH1F RebinHist(TH1F const &hist)
Definition: Utilities.cc:170
- +
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
+ + + diff --git a/_c_m_s_hist_func_factory_8h.html b/_c_m_s_hist_func_factory_8h.html index b9d75435daa..13c64e158f9 100644 --- a/_c_m_s_hist_func_factory_8h.html +++ b/_c_m_s_hist_func_factory_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/interface/CMSHistFuncFactory.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_c_m_s_hist_func_factory_8h_source.html b/_c_m_s_hist_func_factory_8h_source.html index aff4e6b588e..deced0390b9 100644 --- a/_c_m_s_hist_func_factory_8h_source.html +++ b/_c_m_s_hist_func_factory_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/interface/CMSHistFuncFactory.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -144,8 +141,8 @@
36 
37  TH1F AsTH1F(TH1 const* hist) {
38  TH1F res;
-
39  TH1F const* test_f = dynamic_cast<TH1F const*>(hist);
-
40  TH1D const* test_d = dynamic_cast<TH1D const*>(hist);
+
39  TH1F const* test_f = dynamic_cast<TH1F const*>(hist);
+
40  TH1D const* test_d = dynamic_cast<TH1D const*>(hist);
41  if (test_f) {
42  test_f->Copy(res);
43  } else if (test_d) {
@@ -174,16 +171,16 @@
66 }
67 
68 #endif
-
- -
void SetHorizontalMorphingVariable(std::map< std::string, RooAbsReal * > &hvar)
- -
Definition: Algorithm.h:10
- -
void Run(CombineHarvester &cb, RooWorkspace &ws, std::map< std::string, std::string > process_vs_norm_postfix_map)
- +
void Run(CombineHarvester &cb, RooWorkspace &ws, std::map< std::string, std::string > process_vs_norm_postfix_map)
+
void SetHorizontalMorphingVariable(std::map< std::string, RooAbsReal * > &hvar)
+ + +
Definition: Algorithm.h:10
+ + + diff --git a/_card_writer_8cc.html b/_card_writer_8cc.html index 1899e4263d9..c64aa8b18cb 100644 --- a/_card_writer_8cc.html +++ b/_card_writer_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CardWriter.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_card_writer_8cc_source.html b/_card_writer_8cc_source.html index bc831abd42e..7309a393ffb 100644 --- a/_card_writer_8cc_source.html +++ b/_card_writer_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CardWriter.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -288,34 +285,34 @@
180  return pattern;
181 }
182 }
-
- -
void ForEachObj(Function func)
-
CardWriter & CreateDirectories(bool flag)
Control whether directories can be created if missing.
Definition: CardWriter.cc:25
-
#define LAUNCH_FUNCTION_TIMER(x, y)
Conveniently initialise a ch::FnTimer instance.
Definition: Logging.h:67
-
virtual std::string const & era() const
Definition: Object.h:29
-
CardWriter(std::string const &text_pattern, std::string const &root_pattern)
Must be constructed with text and ROOT file patterns.
Definition: CardWriter.cc:12
+ -
virtual std::string const & bin() const
Definition: Object.h:17
-
Automates the writing of datacards into directory structures.
Definition: CardWriter.h:50
-
virtual std::string const & channel() const
Definition: Object.h:32
-
bool contains(const Range &r, T p)
Definition: Algorithm.h:22
-
virtual std::string const & analysis() const
Definition: Object.h:26
+
#define FNLOGC(x, y)
Definition: Logging.h:14
-
virtual std::string const & mass() const
Definition: Object.h:38
-
Definition: Algorithm.h:10
- -
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
#define LAUNCH_FUNCTION_TIMER(x, y)
Conveniently initialise a ch::FnTimer instance.
Definition: Logging.h:67
+
Automates the writing of datacards into directory structures.
Definition: CardWriter.h:50
+
CardWriter & CreateDirectories(bool flag)
Control whether directories can be created if missing.
Definition: CardWriter.cc:25
+
CardWriter & SetWildcardMasses(std::vector< std::string > const &masses)
Redefine the mass values that should be treated as wildcards.
Definition: CardWriter.cc:31
std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
Definition: CardWriter.cc:96
-
CombineHarvester & FilterAll(Function func)
-
virtual int bin_id() const
Definition: Object.h:35
-
CardWriter & SetVerbosity(unsigned v)
Set >= 1 for verbose output, otherwise silent.
Definition: CardWriter.cc:20
+
CardWriter(std::string const &text_pattern, std::string const &root_pattern)
Must be constructed with text and ROOT file patterns.
Definition: CardWriter.cc:12
+
void WriteDatacard(std::string const &name, std::string const &root_file)
+
CombineHarvester & FilterAll(Function func)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
void ForEachObj(Function func)
+
virtual std::string const & process() const
Definition: Object.h:20
-
void WriteDatacard(std::string const &name, std::string const &root_file)
- -
CardWriter & SetWildcardMasses(std::vector< std::string > const &masses)
Redefine the mass values that should be treated as wildcards.
Definition: CardWriter.cc:31
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual int bin_id() const
Definition: Object.h:35
+
virtual std::string const & analysis() const
Definition: Object.h:26
+
virtual std::string const & era() const
Definition: Object.h:29
+
virtual std::string const & mass() const
Definition: Object.h:38
+
virtual std::string const & channel() const
Definition: Object.h:32
+
Definition: Algorithm.h:10
+
bool contains(const Range &r, T p)
Definition: Algorithm.h:22
+ + diff --git a/_card_writer_8h.html b/_card_writer_8h.html index 1d2e7cc83a2..52b1d95d286 100644 --- a/_card_writer_8h.html +++ b/_card_writer_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/CardWriter.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_card_writer_8h_source.html b/_card_writer_8h_source.html index 93177d67853..e074233d635 100644 --- a/_card_writer_8h_source.html +++ b/_card_writer_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/CardWriter.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -143,19 +140,19 @@
78 }
79 
80 #endif
-
- -
CardWriter & CreateDirectories(bool flag)
Control whether directories can be created if missing.
Definition: CardWriter.cc:25
-
CardWriter(std::string const &text_pattern, std::string const &root_pattern)
Must be constructed with text and ROOT file patterns.
Definition: CardWriter.cc:12
+ +
Automates the writing of datacards into directory structures.
Definition: CardWriter.h:50
-
Definition: Algorithm.h:10
+
CardWriter & CreateDirectories(bool flag)
Control whether directories can be created if missing.
Definition: CardWriter.cc:25
+
CardWriter & SetWildcardMasses(std::vector< std::string > const &masses)
Redefine the mass values that should be treated as wildcards.
Definition: CardWriter.cc:31
std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
Definition: CardWriter.cc:96
-
CardWriter & SetVerbosity(unsigned v)
Set >= 1 for verbose output, otherwise silent.
Definition: CardWriter.cc:20
+
CardWriter(std::string const &text_pattern, std::string const &root_pattern)
Must be constructed with text and ROOT file patterns.
Definition: CardWriter.cc:12
- - -
CardWriter & SetWildcardMasses(std::vector< std::string > const &masses)
Redefine the mass values that should be treated as wildcards.
Definition: CardWriter.cc:31
+ +
Definition: Algorithm.h:10
+ + diff --git a/_charged_higgs_8md.html b/_charged_higgs_8md.html index 46b1944241f..82ccfc62902 100644 --- a/_charged_higgs_8md.html +++ b/_charged_higgs_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/ChargedHiggs.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_combine_harvester_8cc.html b/_combine_harvester_8cc.html index 6cc01ad7118..ddde9da37b1 100644 --- a/_combine_harvester_8cc.html +++ b/_combine_harvester_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_combine_harvester_8cc_source.html b/_combine_harvester_8cc_source.html index f4e68fb681d..80b672b9c94 100644 --- a/_combine_harvester_8cc_source.html +++ b/_combine_harvester_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -133,132 +130,132 @@
25  flags_["workspace-uuid-recycle"] = true;
26  flags_["import-parameter-err"] = true;
27  flags_["filters-use-regex"] = false;
-
28  // std::cout << "[CombineHarvester] Constructor called for " << this << "\n";
-
29 }
-
30 
- -
32  // std::cout << "[CombineHarvester] Destructor called for " << this << "\n";
-
33 }
-
34 
-
35 void swap(CombineHarvester& first, CombineHarvester& second) {
-
36  using std::swap;
-
37  // std::cout << "[CombineHarvester] Swap " << &first << " <-> "
-
38  // << &second << "\n";
-
39  swap(first.obs_, second.obs_);
-
40  swap(first.procs_, second.procs_);
-
41  swap(first.systs_, second.systs_);
-
42  swap(first.params_, second.params_);
-
43  swap(first.wspaces_, second.wspaces_);
-
44  swap(first.verbosity_, second.verbosity_);
-
45  swap(first.flags_, second.flags_);
-
46  swap(first.post_lines_, second.post_lines_);
-
47  swap(first.log_, second.log_);
-
48  swap(first.auto_stats_settings_, second.auto_stats_settings_);
-
49 }
-
50 
- -
52  : obs_(other.obs_),
-
53  procs_(other.procs_),
-
54  systs_(other.systs_),
-
55  params_(other.params_),
-
56  wspaces_(other.wspaces_),
-
57  flags_(other.flags_),
-
58  auto_stats_settings_(other.auto_stats_settings_),
-
59  post_lines_(other.post_lines_),
-
60  verbosity_(other.verbosity_),
-
61  log_(other.log_) {
-
62  // std::cout << "[CombineHarvester] Copy-constructor called " << &other
-
63  // << " -> " << this << "\n";
-
64 }
-
65 
+
28  flags_["fix-rooconstvar"] = false;
+
29  // std::cout << "[CombineHarvester] Constructor called for " << this << "\n";
+
30 }
+
31 
+ +
33  // std::cout << "[CombineHarvester] Destructor called for " << this << "\n";
+
34 }
+
35 
+
36 void swap(CombineHarvester& first, CombineHarvester& second) {
+
37  using std::swap;
+
38  // std::cout << "[CombineHarvester] Swap " << &first << " <-> "
+
39  // << &second << "\n";
+
40  swap(first.obs_, second.obs_);
+
41  swap(first.procs_, second.procs_);
+
42  swap(first.systs_, second.systs_);
+
43  swap(first.params_, second.params_);
+
44  swap(first.wspaces_, second.wspaces_);
+
45  swap(first.verbosity_, second.verbosity_);
+
46  swap(first.flags_, second.flags_);
+
47  swap(first.post_lines_, second.post_lines_);
+
48  swap(first.log_, second.log_);
+
49  swap(first.auto_stats_settings_, second.auto_stats_settings_);
+
50 }
+
51 
+ +
53  : obs_(other.obs_),
+
54  procs_(other.procs_),
+
55  systs_(other.systs_),
+
56  params_(other.params_),
+
57  wspaces_(other.wspaces_),
+
58  flags_(other.flags_),
+
59  auto_stats_settings_(other.auto_stats_settings_),
+
60  post_lines_(other.post_lines_),
+
61  verbosity_(other.verbosity_),
+
62  log_(other.log_) {
+
63  // std::cout << "[CombineHarvester] Copy-constructor called " << &other
+
64  // << " -> " << this << "\n";
+
65 }
66 
-
67 void CombineHarvester::SetFlag(std::string const& flag, bool const& value) {
-
68  auto it = flags_.find(flag);
-
69  if (it != flags_.end()) {
-
70  FNLOG(std::cout) << "Changing value of flag \"" << it->first << "\" from " << it->second << " to " << value << "\n";
-
71  it->second = value;
-
72  } else {
-
73  FNLOG(std::cout) << "Created new flag \"" << flag << "\" with value " << value << "\n";
-
74  flags_[flag] = value;
-
75  }
-
76 }
-
77 
-
78 bool CombineHarvester::GetFlag(std::string const& flag) const {
-
79  auto it = flags_.find(flag);
-
80  if (it != flags_.end()) {
-
81  return it->second;
-
82  } else {
-
83  throw std::runtime_error(FNERROR("Flag " + flag + " is not defined"));
-
84  }
-
85 }
-
86 
- -
88  CombineHarvester cpy;
-
89  // std::cout << "[CombineHarvester] Deep copy called " << this
-
90  // << " -> " << &cpy << "\n";
-
91  cpy.obs_.resize(obs_.size());
-
92  cpy.procs_.resize(procs_.size());
-
93  cpy.systs_.resize(systs_.size());
-
94  cpy.flags_ = flags_;
-
95  cpy.verbosity_ = verbosity_;
-
96  cpy.post_lines_ = post_lines_;
-
97  cpy.log_ = log_;
-
98 
-
99  // Build a map of workspace object pointers
-
100  std::map<RooAbsData const*, RooAbsData *> dat_map;
-
101  std::map<RooAbsReal const*, RooAbsReal *> pdf_map;
-
102  std::map<RooRealVar const*, RooRealVar *> var_map;
-
103  std::map<RooAbsReal const*, RooAbsReal *> fun_map;
-
104 
-
105  // Loop through each workspace and make a full copy
-
106  for (auto const& it : wspaces_) {
-
107  std::string ws_name = it.first;
-
108  RooWorkspace const& o_wsp = *(it.second.get());
-
109  cpy.wspaces_.insert({ws_name, std::make_shared<RooWorkspace>(o_wsp)});
-
110  RooWorkspace & n_wsp = *(cpy.wspaces_.at(ws_name).get());
-
111 
-
112  std::list<RooAbsData *> o_dat = o_wsp.allData();
-
113  RooArgSet const& o_pdf = o_wsp.allPdfs();
-
114  RooArgSet const& o_var = o_wsp.allVars();
-
115  RooArgSet const& o_fun = o_wsp.allFunctions();
-
116 
-
117  std::list<RooAbsData *> n_dat = n_wsp.allData();
-
118  RooArgSet const& n_pdf = n_wsp.allPdfs();
-
119  RooArgSet const& n_var = n_wsp.allVars();
-
120  RooArgSet const& n_fun = n_wsp.allFunctions();
-
121 
-
122  auto o_dat_it = o_dat.begin();
-
123  auto n_dat_it = n_dat.begin();
-
124  for (; o_dat_it != o_dat.end(); ++o_dat_it, ++n_dat_it) {
-
125  dat_map[*o_dat_it] = *n_dat_it;
-
126  }
-
127 
-
128  auto o_pdf_it = o_pdf.createIterator();
-
129  auto n_pdf_it = n_pdf.createIterator();
-
130  do {
-
131  RooAbsPdf *o_pdf_ptr = static_cast<RooAbsPdf*>(**o_pdf_it);
-
132  RooAbsPdf *n_pdf_ptr = static_cast<RooAbsPdf*>(**n_pdf_it);
-
133  if (o_pdf_ptr && n_pdf_ptr) pdf_map[o_pdf_ptr] = n_pdf_ptr;
-
134  n_pdf_it->Next();
-
135  } while (o_pdf_it->Next());
-
136 
-
137  auto o_var_it = o_var.createIterator();
-
138  auto n_var_it = n_var.createIterator();
-
139  do {
-
140  RooRealVar *o_var_ptr = static_cast<RooRealVar*>(**o_var_it);
-
141  RooRealVar *n_var_ptr = static_cast<RooRealVar*>(**n_var_it);
-
142  if (o_var_ptr && n_var_ptr) var_map[o_var_ptr] = n_var_ptr;
-
143  n_var_it->Next();
-
144  } while (o_var_it->Next());
+
67 
+
68 void CombineHarvester::SetFlag(std::string const& flag, bool const& value) {
+
69  auto it = flags_.find(flag);
+
70  if (it != flags_.end()) {
+
71  FNLOG(std::cout) << "Changing value of flag \"" << it->first << "\" from " << it->second << " to " << value << "\n";
+
72  it->second = value;
+
73  } else {
+
74  FNLOG(std::cout) << "Created new flag \"" << flag << "\" with value " << value << "\n";
+
75  flags_[flag] = value;
+
76  }
+
77 }
+
78 
+
79 bool CombineHarvester::GetFlag(std::string const& flag) const {
+
80  auto it = flags_.find(flag);
+
81  if (it != flags_.end()) {
+
82  return it->second;
+
83  } else {
+
84  throw std::runtime_error(FNERROR("Flag " + flag + " is not defined"));
+
85  }
+
86 }
+
87 
+ +
89  CombineHarvester cpy;
+
90  // std::cout << "[CombineHarvester] Deep copy called " << this
+
91  // << " -> " << &cpy << "\n";
+
92  cpy.obs_.resize(obs_.size());
+
93  cpy.procs_.resize(procs_.size());
+
94  cpy.systs_.resize(systs_.size());
+
95  cpy.flags_ = flags_;
+
96  cpy.verbosity_ = verbosity_;
+
97  cpy.post_lines_ = post_lines_;
+
98  cpy.log_ = log_;
+
99 
+
100  // Build a map of workspace object pointers
+
101  std::map<RooAbsData const*, RooAbsData *> dat_map;
+
102  std::map<RooAbsReal const*, RooAbsReal *> pdf_map;
+
103  std::map<RooRealVar const*, RooRealVar *> var_map;
+
104  std::map<RooAbsReal const*, RooAbsReal *> fun_map;
+
105 
+
106  // Loop through each workspace and make a full copy
+
107  for (auto const& it : wspaces_) {
+
108  std::string ws_name = it.first;
+
109  RooWorkspace const& o_wsp = *(it.second.get());
+
110  cpy.wspaces_.insert({ws_name, std::make_shared<RooWorkspace>(o_wsp)});
+
111  RooWorkspace & n_wsp = *(cpy.wspaces_.at(ws_name).get());
+
112 
+
113  std::list<RooAbsData *> o_dat = o_wsp.allData();
+
114  RooArgSet const& o_pdf = o_wsp.allPdfs();
+
115  RooArgSet const& o_var = o_wsp.allVars();
+
116  RooArgSet const& o_fun = o_wsp.allFunctions();
+
117 
+
118  std::list<RooAbsData *> n_dat = n_wsp.allData();
+
119  RooArgSet const& n_pdf = n_wsp.allPdfs();
+
120  RooArgSet const& n_var = n_wsp.allVars();
+
121  RooArgSet const& n_fun = n_wsp.allFunctions();
+
122 
+
123  auto o_dat_it = o_dat.begin();
+
124  auto n_dat_it = n_dat.begin();
+
125  for (; o_dat_it != o_dat.end(); ++o_dat_it, ++n_dat_it) {
+
126  dat_map[*o_dat_it] = *n_dat_it;
+
127  }
+
128 
+
129  Int_t nPdf = o_pdf.getSize();
+
130 
+
131  for (Int_t i=0; i<nPdf; ++i) {
+
132 
+
133  RooAbsReal* o_pdf_ptr = dynamic_cast<RooAbsReal *>(o_pdf[i]);
+
134  RooAbsReal* n_pdf_ptr = dynamic_cast<RooAbsReal *>(n_pdf[i]);
+
135  if (o_pdf_ptr && n_pdf_ptr) pdf_map[o_pdf_ptr] = n_pdf_ptr;
+
136  }
+
137 
+
138  Int_t nVar = o_var.getSize();
+
139 
+
140  for (Int_t i=0; i<nVar; ++i) {
+
141  RooRealVar *o_var_ptr = dynamic_cast<RooRealVar*>(o_var[i]);
+
142  RooRealVar *n_var_ptr = dynamic_cast<RooRealVar*>(n_var[i]);
+
143  if (o_var_ptr && n_var_ptr) var_map[o_var_ptr] = n_var_ptr;
+
144  }
145 
-
146  auto o_fun_it = o_fun.createIterator();
-
147  auto n_fun_it = n_fun.createIterator();
-
148  do {
-
149  RooAbsReal *o_fun_ptr = static_cast<RooAbsReal*>(**o_fun_it);
-
150  RooAbsReal *n_fun_ptr = static_cast<RooAbsReal*>(**n_fun_it);
+
146  Int_t nFun = o_fun.getSize();
+
147 
+
148  for (Int_t i=0; i<nFun; ++i) {
+
149  RooAbsReal* o_fun_ptr = dynamic_cast<RooAbsReal *>(o_fun[i]);
+
150  RooAbsReal* n_fun_ptr = dynamic_cast<RooAbsReal *>(n_fun[i]);
151  if (o_fun_ptr && n_fun_ptr) fun_map[o_fun_ptr] = n_fun_ptr;
-
152  n_fun_it->Next();
-
153  } while (o_fun_it->Next());
+
152  }
+
153 
154  }
155 
156 
@@ -289,8 +286,8 @@
181  cpy.systs_[i] = std::make_shared<Systematic>(*(systs_[i]));
182  if (systs_[i]->data_u() || systs_[i]->data_d()) {
183  cpy.systs_[i]->set_data(
-
184  static_cast<RooDataHist*>(dat_map.at(systs_[i]->data_u())),
-
185  static_cast<RooDataHist*>(dat_map.at(systs_[i]->data_d())),
+
184  static_cast<RooDataHist*>(dat_map.at(systs_[i]->data_u())),
+
185  static_cast<RooDataHist*>(dat_map.at(systs_[i]->data_d())),
186  nullptr);
187  }
188  }
@@ -522,7 +519,7 @@
466  }
467  // If we can upcast norm to a RooRealVar then we can interpret
468  // it as a free parameter that should be added to the list
-
469  RooRealVar* norm_var = dynamic_cast<RooRealVar*>(norm);
+
469  RooRealVar* norm_var = dynamic_cast<RooRealVar*>(norm);
470  if (norm_var) {
471  RooArgSet tmp_set(*norm_var);
472  ImportParameters(&tmp_set);
@@ -588,7 +585,7 @@
532  boost::replace_all(mapping.pattern, "$PROCESS", entry->process());
533  boost::replace_all(mapping.pattern, "$MASS", entry->mass());
534  std::string p_s =
-
535  mapping.IsPdf() ? mapping.SystWorkspaceObj() : mapping.syst_pattern;
+
535  mapping.IsPdf() ? mapping.SystWorkspaceObj() : mapping.syst_pattern;
536  boost::replace_all(p_s, "$CHANNEL", entry->bin());
537  boost::replace_all(p_s, "$BIN", entry->bin());
538  boost::replace_all(p_s, "$PROCESS", entry->process());
@@ -634,11 +631,11 @@
578  // Try and get this as RooAbsData first. If this doesn't work try pdf
579 
580  RooDataHist* h =
-
581  (mapping.sys_ws) ? dynamic_cast<RooDataHist*>(mapping.sys_ws->data(mapping.WorkspaceObj().c_str())) : nullptr;
+
581  (mapping.sys_ws) ? dynamic_cast<RooDataHist*>(mapping.sys_ws->data(mapping.WorkspaceObj().c_str())) : nullptr;
582  RooDataHist* h_u =
-
583  (mapping.sys_ws) ? dynamic_cast<RooDataHist*>(mapping.sys_ws->data(p_s_hi.c_str())): nullptr;
+
583  (mapping.sys_ws) ? dynamic_cast<RooDataHist*>(mapping.sys_ws->data(p_s_hi.c_str())): nullptr;
584  RooDataHist* h_d =
-
585  (mapping.sys_ws) ? dynamic_cast<RooDataHist*>(mapping.sys_ws->data(p_s_lo.c_str())): nullptr;
+
585  (mapping.sys_ws) ? dynamic_cast<RooDataHist*>(mapping.sys_ws->data(p_s_lo.c_str())): nullptr;
586  RooAbsReal* pdf = (mapping.sys_ws) ? mapping.sys_ws->function(mapping.WorkspaceObj().c_str()):nullptr;
587  RooAbsReal* pdf_u = (mapping.sys_ws) ? mapping.sys_ws->function(p_s_hi.c_str()):nullptr;
588  RooAbsReal* pdf_d = (mapping.sys_ws) ? mapping.sys_ws->function(p_s_lo.c_str()):nullptr;
@@ -718,312 +715,344 @@
681  // bugs
682  if (GetFlag("workspaces-use-clone")) {
683  wspaces_[std::string(ws.GetName())] = std::shared_ptr<RooWorkspace>(
-
684  reinterpret_cast<RooWorkspace*>(ws.Clone()));
-
685  } else {
-
686  wspaces_[std::string(ws.GetName())] =
-
687  std::make_shared<RooWorkspace>(RooWorkspace(ws));
-
688  }
-
689  return wspaces_.at(ws.GetName());
-
690  }
-
691 
-
692  // 3) Am I allowed to rename (default no)?
-
693  if (!can_rename) {
-
694  // - No: throw runtime error
-
695  throw std::runtime_error(FNERROR("A different workspace with name " +
-
696  std::string(ws.GetName()) +
-
697  " already exists"));
-
698  }
-
699 
-
700  // 4) Yes: determine first available nameX, clone, return
-
701  std::set<int> used_ints = {0};
-
702  std::string src_name(ws.GetName());
-
703  for (auto const& it : wspaces_) {
-
704  std::string test_name(it.second->GetName());
-
705  if (test_name.find(src_name) == 0) {
-
706  std::string postfix = test_name.substr(src_name.size());
-
707  try {
-
708  int number = boost::lexical_cast<int>(postfix);
-
709  used_ints.insert(number);
-
710  } catch (boost::bad_lexical_cast & e) {
-
711  }
-
712  }
-
713  }
-
714  std::string new_name =
-
715  src_name + boost::lexical_cast<std::string>(*(used_ints.rbegin()) + 1);
-
716  FNLOGC(log(), verbosity_ >= 1) << "Workspace with name " << src_name
-
717  << " already defined, renaming to " << new_name
-
718  << "\n";
-
719 
-
720  std::shared_ptr<RooWorkspace> new_wsp;
-
721  if (GetFlag("workspaces-use-clone")) {
-
722  new_wsp = std::shared_ptr<RooWorkspace>(
-
723  reinterpret_cast<RooWorkspace*>(ws.Clone(new_name.c_str())));
-
724  } else {
-
725  new_wsp = std::make_shared<RooWorkspace>(RooWorkspace(ws));
-
726  }
-
727  new_wsp->SetName(new_name.c_str());
-
728  wspaces_[new_name] = new_wsp;
-
729  return wspaces_.at(new_name);
-
730 }
-
731 
-
732 void CombineHarvester::ImportParameters(RooArgSet *vars) {
-
733  auto x = vars->createIterator();
-
734  do {
-
735  RooRealVar *y = dynamic_cast<RooRealVar*>(**x);
-
736  if (y) {
-
737  if (!params_.count(y->GetName())) {
-
738  if (verbosity_ >= 1) {
-
739  log() << "[ImportParameters] Creating parameter from RooRealVar:\n";
-
740  y->printStream(log(), y->defaultPrintContents(0),
-
741  y->defaultPrintStyle(0), "[ImportParameters] ");
-
742  }
-
743  Parameter par;
-
744  par.set_name(y->GetName());
-
745  par.set_val(y->getVal());
-
746  if ((y->hasError() || y->hasAsymError()) &&
-
747  flags_["import-parameter-err"]) {
-
748  par.set_err_d(y->getErrorLo());
-
749  par.set_err_u(y->getErrorHi());
-
750  } else {
-
751  par.set_err_d(0.);
-
752  par.set_err_u(0.);
-
753  }
-
754  params_[y->GetName()] = std::make_shared<Parameter>(par);
-
755  } else {
-
756  if (verbosity_ >= 1)
-
757  log() << "[ImportParameters] Parameter \"" << y->GetName()
-
758  << "\" already exists\n";
-
759  }
-
760  Parameter *param = params_[y->GetName()].get();
-
761  std::vector<RooRealVar *> & p_vars = param->vars();
-
762  if (std::find(p_vars.begin(), p_vars.end(), y) == p_vars.end()) {
-
763  p_vars.push_back(y);
-
764  if (verbosity_ >= 1)
-
765  log() << "[ImportParameters] Parameter now stores " << p_vars.size()
-
766  << " link(s) to RooRealVar objects\n";
-
767  } else {
-
768  if (verbosity_ >= 1)
-
769  log() << "[ImportParameters] Parameter already stores link to "
-
770  "RooRealVar object\n";
-
771  }
-
772  }
-
773  } while (x->Next());
-
774 }
-
775 
-
776 RooAbsData const* CombineHarvester::FindMatchingData(Process const* proc) {
-
777  RooAbsData const* data_obj = nullptr;
-
778  for (unsigned i = 0; i < obs_.size(); ++i) {
-
779  if (proc->bin() == obs_[i]->bin() &&
-
780  proc->bin_id() == obs_[i]->bin_id()) {
-
781  data_obj = obs_[i]->data();
-
782  }
-
783  }
-
784  return data_obj;
-
785 }
-
786 
-
787 ch::Parameter* CombineHarvester::SetupRateParamVar(std::string const& name,
-
788  double val, bool is_ext_arg) {
-
789  RooWorkspace *ws = nullptr;
-
790  if (!wspaces_.count("_rateParams")) {
-
791  ws = this->SetupWorkspace(RooWorkspace("_rateParams","_rateParams")).get();
-
792  } else {
-
793  ws = wspaces_.at("_rateParams").get();
-
794  }
-
795  // Parameter doesn't exist in the workspace - let's create it
-
796  RooRealVar *var = ws->var(name.c_str());
-
797  if (!var) {
-
798  // The value doesn't matter, our Parameter object will set it later
-
799  RooRealVar tmp_var(name.c_str(), name.c_str(), 0);
-
800  ws->import(tmp_var);
-
801  var = ws->var(name.c_str());
-
802  FNLOGC(log(), verbosity_ > 1)
-
803  << "Created new RooRealVar for rateParam: " << name << "\n";
-
804  if (verbosity_ > 1) var->Print();
-
805  } else {
-
806  FNLOGC(log(), verbosity_ > 1)
-
807  << "Reusing existing RooRealVar for rateParam: " << name << "\n";
-
808  }
-
809  if (is_ext_arg) var->setAttribute("extArg");
-
810  Parameter * param = nullptr;
-
811  if (!params_.count(name)) {
-
812  params_[name] = std::make_shared<Parameter>(Parameter());
-
813  param = params_.at(name).get();
-
814  param->set_name(name);
-
815  param->set_err_u(0.);
-
816  param->set_err_d(0.);
-
817  } else {
-
818  param = params_.at(name).get();
-
819  }
-
820  // If the RooRealVar in the workpsace isn't in the list, add it
-
821  bool var_in_par = false;
-
822  for (auto const& ptr : param->vars()) {
-
823  if (ptr == var) {
-
824  var_in_par = true;
-
825  break;
-
826  }
-
827  }
-
828  if (!var_in_par) {
-
829  param->vars().push_back(var);
-
830  }
-
831  // Then this propagates the value to the RooRealVar
-
832  FNLOGC(log(), verbosity_ > 1) << "Updating parameter value from "
-
833  << param->val();
-
834  param->set_val(val);
-
835  if (verbosity_ > 1) log() << " to " << param->val() << "\n";
-
836  return param;
-
837 }
-
838 
-
839 void CombineHarvester::SetupRateParamFunc(std::string const& name,
-
840  std::string const& formula,
-
841  std::string const& pars) {
-
842  RooWorkspace *ws = nullptr;
-
843  if (!wspaces_.count("_rateParams")) {
-
844  ws = this->SetupWorkspace(RooWorkspace("_rateParams","_rateParams")).get();
-
845  } else {
-
846  ws = wspaces_.at("_rateParams").get();
-
847  }
-
848  RooAbsReal *form = ws->function(name.c_str());
-
849  // No parameter to make, this is a formula
-
850  if (!form) {
-
851  RooFormulaVar formularvar(name.c_str(), name.c_str(),
-
852  formula.c_str(),
-
853  RooArgList(ws->argSet(pars.c_str())));
-
854  ws->import(formularvar);
-
855  form = ws->function(name.c_str());
-
856  FNLOGC(log(), verbosity_ > 1)
-
857  << "Created new RooFormulaVar for rateParam: " << name << "\n";
-
858  if (verbosity_ > 1) form->Print();
-
859  }
-
860 }
-
861 
-
862 void CombineHarvester::SetupRateParamWspObj(std::string const& name,
-
863  std::string const& obj, bool is_ext_arg) {
-
864  RooWorkspace *ws = nullptr;
-
865  if (!wspaces_.count("_rateParams")) {
-
866  ws = this->SetupWorkspace(RooWorkspace("_rateParams","_rateParams")).get();
-
867  } else {
-
868  ws = wspaces_.at("_rateParams").get();
-
869  }
-
870  ws->import((obj+":"+name).c_str(), RooFit::RecycleConflictNodes());
-
871  ws->arg(name.c_str())->setStringAttribute("wspSource", obj.c_str());
-
872  if (is_ext_arg) ws->arg(name.c_str())->setAttribute("extArg");
-
873 }
-
874 
-
875 void CombineHarvester::SetAutoMCStats(CombineHarvester &target, double thresh, bool sig, int mode) {
-
876  for (auto const& bin : this->bin_set()) {
-
877  target.auto_stats_settings_[bin] = AutoMCStatsSettings(thresh, sig, mode);
-
878  }
-
879 }
-
880 
-
881 void CombineHarvester::RenameAutoMCStatsBin(std::string const& oldname, std::string const& newname) {
-
882  auto it = auto_stats_settings_.find(oldname);
-
883  if (it != auto_stats_settings_.end()) {
-
884  auto_stats_settings_[newname] = it->second;
-
885  auto_stats_settings_.erase(it);
-
886  }
-
887 }
-
888 
-
889 std::set<std::string> CombineHarvester::GetAutoMCStatsBins() const {
-
890  std::set<std::string> result;
-
891  for (auto const& it : auto_stats_settings_) {
-
892  result.insert(it.first);
-
893  }
-
894  return result;
-
895 }
-
896 
-
897 void CombineHarvester::AddExtArgValue(std::string const& name, double const& value) {
-
898  ch::Parameter* param = SetupRateParamVar(name, value, true);
-
899  param->set_err_u(0.);
-
900  param->set_err_d(0.);
-
901 }
-
902 
-
903 double CombineHarvester::getParFromWs(const std::string name){
-
904  double r=0.; bool found=false;
-
905  for (auto & item : wspaces_) {
-
906  if (item.second.get()->var(name.c_str())) {
-
907  if (found) std::cout<<"WARNING-DUPLICATE: ALREADY FOUND "<<name<<"in an other ws"<<r<<std::endl;
-
908  r=item.second.get()->var(name.c_str())->getVal();
-
909  found=true;
-
910  }
-
911  }
-
912  return r;
-
913  }
-
914 
-
915 void CombineHarvester::setParInWs(const std::string name,double value) {
-
916  for (auto & item : wspaces_) {
-
917  if (item.second.get()->var(name.c_str())){
-
918  if ( item.second.get()->var(name.c_str())->getMin() >value) item.second.get()->var(name.c_str())->setMin(value-0.001);
-
919  if ( item.second.get()->var(name.c_str())->getMax() <value) item.second.get()->var(name.c_str())->setMax(value+0.001);
-
920  item.second.get()->var(name.c_str())->setVal(value);
-
921  }
-
922  }
-
923  }
-
924 
-
925 void CombineHarvester::renameParInWs(const std::string& name, const std::string& newName, const std::string& wsName)
-
926 {
-
927  for (auto & item : wspaces_) {
-
928  if ( (wsName=="" or item.first == wsName ) and item.second.get()->var(name.c_str())){
-
929  item.second.get()->var(name.c_str())->SetName(newName.c_str());
-
930  }
-
931  }
-
932 }
-
933 
+
684  reinterpret_cast<RooWorkspace*>(ws.Clone(ws.GetName()))
+
685  );
+
686  } else {
+
687  wspaces_[std::string(ws.GetName())] =
+
688  std::make_shared<RooWorkspace>(RooWorkspace(ws));
+
689  }
+
690  return wspaces_.at(ws.GetName());
+
691  }
+
692 
+
693  // 3) Am I allowed to rename (default no)?
+
694  if (!can_rename) {
+
695  // - No: throw runtime error
+
696  throw std::runtime_error(FNERROR("A different workspace with name " +
+
697  std::string(ws.GetName()) +
+
698  " already exists"));
+
699  }
+
700 
+
701  // 4) Yes: determine first available nameX, clone, return
+
702  std::set<int> used_ints = {0};
+
703  std::string src_name(ws.GetName());
+
704  for (auto const& it : wspaces_) {
+
705  std::string test_name(it.second->GetName());
+
706  if (test_name.find(src_name) == 0) {
+
707  std::string postfix = test_name.substr(src_name.size());
+
708  try {
+
709  int number = boost::lexical_cast<int>(postfix);
+
710  used_ints.insert(number);
+
711  } catch (boost::bad_lexical_cast & e) {
+
712  }
+
713  }
+
714  }
+
715  std::string new_name =
+
716  src_name + boost::lexical_cast<std::string>(*(used_ints.rbegin()) + 1);
+
717  FNLOGC(log(), verbosity_ >= 1) << "Workspace with name " << src_name
+
718  << " already defined, renaming to " << new_name
+
719  << "\n";
+
720 
+
721  std::shared_ptr<RooWorkspace> new_wsp;
+
722  if (GetFlag("workspaces-use-clone")) {
+
723  new_wsp = std::shared_ptr<RooWorkspace>(
+
724  reinterpret_cast<RooWorkspace*>(ws.Clone(new_name.c_str()))
+
725  );
+
726  } else {
+
727  new_wsp = std::make_shared<RooWorkspace>(RooWorkspace(ws));
+
728  }
+
729  new_wsp->SetName(new_name.c_str());
+
730  wspaces_[new_name] = new_wsp;
+
731  return wspaces_.at(new_name);
+
732 }
+
733 
+
734 void CombineHarvester::ImportParameters(RooArgSet *vars) {
+
735  for (RooAbsArg *x : *vars) {
+
736  RooRealVar *y = dynamic_cast<RooRealVar*>(x);
+
737  if (y) {
+
738  if (!params_.count(y->GetName())) {
+
739  if (verbosity_ >= 1) {
+
740  log() << "[ImportParameters] Creating parameter from RooRealVar:\n";
+
741  y->printStream(log(), y->defaultPrintContents(0),
+
742  y->defaultPrintStyle(0), "[ImportParameters] ");
+
743  }
+
744  Parameter par;
+
745  par.set_name(y->GetName());
+
746  par.set_val(y->getVal());
+
747  if ((y->hasError() || y->hasAsymError()) &&
+
748  flags_["import-parameter-err"]) {
+
749  par.set_err_d(y->getErrorLo());
+
750  par.set_err_u(y->getErrorHi());
+
751  } else {
+
752  par.set_err_d(0.);
+
753  par.set_err_u(0.);
+
754  }
+
755  params_[y->GetName()] = std::make_shared<Parameter>(par);
+
756  } else {
+
757  if (verbosity_ >= 1)
+
758  log() << "[ImportParameters] Parameter \"" << y->GetName()
+
759  << "\" already exists\n";
+
760  }
+
761  Parameter *param = params_[y->GetName()].get();
+
762  std::vector<RooRealVar *> & p_vars = param->vars();
+
763  if (std::find(p_vars.begin(), p_vars.end(), y) == p_vars.end()) {
+
764  p_vars.push_back(y);
+
765  if (verbosity_ >= 1)
+
766  log() << "[ImportParameters] Parameter now stores " << p_vars.size()
+
767  << " link(s) to RooRealVar objects\n";
+
768  } else {
+
769  if (verbosity_ >= 1)
+
770  log() << "[ImportParameters] Parameter already stores link to "
+
771  "RooRealVar object\n";
+
772  }
+
773  }
+
774  }
+
775 }
+
776 
+
777 RooAbsData const* CombineHarvester::FindMatchingData(Process const* proc) {
+
778  RooAbsData const* data_obj = nullptr;
+
779  for (unsigned i = 0; i < obs_.size(); ++i) {
+
780  if (proc->bin() == obs_[i]->bin() &&
+
781  proc->bin_id() == obs_[i]->bin_id()) {
+
782  data_obj = obs_[i]->data();
+
783  }
+
784  }
+
785  return data_obj;
+
786 }
+
787 
+
788 ch::Parameter* CombineHarvester::SetupRateParamVar(std::string const& name,
+
789  double val, bool is_ext_arg) {
+
790  RooWorkspace *ws = nullptr;
+
791  if (!wspaces_.count("_rateParams")) {
+
792  ws = this->SetupWorkspace(RooWorkspace("_rateParams","_rateParams")).get();
+
793  } else {
+
794  ws = wspaces_.at("_rateParams").get();
+
795  }
+
796  // Parameter doesn't exist in the workspace - let's create it
+
797  RooRealVar *var = ws->var(name.c_str());
+
798  if (!var) {
+
799  // The value doesn't matter, our Parameter object will set it later
+
800  RooRealVar tmp_var(name.c_str(), name.c_str(), 0);
+
801  ws->import(tmp_var);
+
802  var = ws->var(name.c_str());
+
803  FNLOGC(log(), verbosity_ > 1)
+
804  << "Created new RooRealVar for rateParam: " << name << "\n";
+
805  if (verbosity_ > 1) var->Print();
+
806  } else {
+
807  FNLOGC(log(), verbosity_ > 1)
+
808  << "Reusing existing RooRealVar for rateParam: " << name << "\n";
+
809  }
+
810  if (is_ext_arg) var->setAttribute("extArg");
+
811  Parameter * param = nullptr;
+
812  if (!params_.count(name)) {
+
813  params_[name] = std::make_shared<Parameter>(Parameter());
+
814  param = params_.at(name).get();
+
815  param->set_name(name);
+
816  param->set_err_u(0.);
+
817  param->set_err_d(0.);
+
818  } else {
+
819  param = params_.at(name).get();
+
820  }
+
821  // If the RooRealVar in the workpsace isn't in the list, add it
+
822  bool var_in_par = false;
+
823  for (auto const& ptr : param->vars()) {
+
824  if (ptr == var) {
+
825  var_in_par = true;
+
826  break;
+
827  }
+
828  }
+
829  if (!var_in_par) {
+
830  param->vars().push_back(var);
+
831  }
+
832  // Then this propagates the value to the RooRealVar
+
833  FNLOGC(log(), verbosity_ > 1) << "Updating parameter value from "
+
834  << param->val();
+
835  param->set_val(val);
+
836  if (verbosity_ > 1) log() << " to " << param->val() << "\n";
+
837  return param;
+
838 }
+
839 
+
840 void CombineHarvester::SetupRateParamFunc(std::string const& name,
+
841  std::string const& formula,
+
842  std::string const& pars) {
+
843  RooWorkspace *ws = nullptr;
+
844  if (!wspaces_.count("_rateParams")) {
+
845  ws = this->SetupWorkspace(RooWorkspace("_rateParams","_rateParams")).get();
+
846  } else {
+
847  ws = wspaces_.at("_rateParams").get();
+
848  }
+
849  RooAbsReal *form = ws->function(name.c_str());
+
850  // No parameter to make, this is a formula
+
851  if (!form) {
+
852  RooFormulaVar formularvar(name.c_str(), name.c_str(),
+
853  formula.c_str(),
+
854  RooArgList(ws->argSet(pars.c_str())));
+
855  ws->import(formularvar);
+
856  form = ws->function(name.c_str());
+
857  FNLOGC(log(), verbosity_ > 1)
+
858  << "Created new RooFormulaVar for rateParam: " << name << "\n";
+
859  if (verbosity_ > 1) form->Print();
+
860  }
+
861 }
+
862 
+
863 void CombineHarvester::SetupRateParamWspObj(std::string const& name,
+
864  std::string const& obj, bool is_ext_arg) {
+
865  RooWorkspace *ws = nullptr;
+
866  if (!wspaces_.count("_rateParams")) {
+
867  ws = this->SetupWorkspace(RooWorkspace("_rateParams","_rateParams")).get();
+
868  } else {
+
869  ws = wspaces_.at("_rateParams").get();
+
870  }
+
871  ws->import((obj+":"+name).c_str(), RooFit::RecycleConflictNodes());
+
872  ws->arg(name.c_str())->setStringAttribute("wspSource", obj.c_str());
+
873  if (is_ext_arg) ws->arg(name.c_str())->setAttribute("extArg");
+
874 }
+
875 
+
876 bool CombineHarvester::SetupRateParamWspObjFromWsStore(std::string const& name, std::string const& obj,
+
877  std::map<std::string, std::shared_ptr<RooWorkspace>> const& ws_store) {
+
878  bool found_arg_in_ws = false;
+
879  RooWorkspace *ws = nullptr;
+
880  if (!wspaces_.count("_rateParams")) {
+
881  ws = this->SetupWorkspace(RooWorkspace("_rateParams","_rateParams")).get();
+
882  } else {
+
883  ws = wspaces_.at("_rateParams").get();
+
884  }
+
885  std::vector<std::string> tokens;
+
886  boost::split(tokens, obj, boost::is_any_of(":"));
+
887 
+
888  std::string file_name_extArg = tokens[0];
+
889  std::string wsp_name_extArg = tokens[1];
+
890 
+
891  RooAbsArg* warg = nullptr;
+
892  for (auto const& it : ws_store) {
+
893  if (boost::ends_with(it.first, file_name_extArg+wsp_name_extArg)){
+
894  warg = it.second->arg(name.c_str()) ;
+
895  break;
+
896  }
+
897  }
+
898 
+
899  if(warg && !ws->arg(name.c_str())) {
+
900  ws->import(*warg, RooFit::RecycleConflictNodes());
+
901  ws->arg(name.c_str())->setStringAttribute("wspSource", obj.c_str());
+
902  ws->arg(name.c_str())->setAttribute("extArg");
+
903  found_arg_in_ws = true;
+
904  }
+
905  return found_arg_in_ws;
+
906 }
+
907 
+
908 void CombineHarvester::SetAutoMCStats(CombineHarvester &target, double thresh, bool sig, int mode) {
+
909  for (auto const& bin : this->bin_set()) {
+
910  target.auto_stats_settings_[bin] = AutoMCStatsSettings(thresh, sig, mode);
+
911  }
+
912 }
+
913 
+
914 void CombineHarvester::RenameAutoMCStatsBin(std::string const& oldname, std::string const& newname) {
+
915  auto it = auto_stats_settings_.find(oldname);
+
916  if (it != auto_stats_settings_.end()) {
+
917  auto_stats_settings_[newname] = it->second;
+
918  auto_stats_settings_.erase(it);
+
919  }
+
920 }
+
921 
+
922 std::set<std::string> CombineHarvester::GetAutoMCStatsBins() const {
+
923  std::set<std::string> result;
+
924  for (auto const& it : auto_stats_settings_) {
+
925  result.insert(it.first);
+
926  }
+
927  return result;
+
928 }
+
929 
+
930 void CombineHarvester::AddExtArgValue(std::string const& name, double const& value) {
+
931  ch::Parameter* param = SetupRateParamVar(name, value, true);
+
932  param->set_err_u(0.);
+
933  param->set_err_d(0.);
934 }
-
- -
CombineHarvester & PrintProcs()
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Systematic.cc:251
+
935 
+
936 double CombineHarvester::getParFromWs(const std::string name){
+
937  double r=0.; bool found=false;
+
938  for (auto & item : wspaces_) {
+
939  if (item.second.get()->var(name.c_str())) {
+
940  if (found) std::cout<<"WARNING-DUPLICATE: ALREADY FOUND "<<name<<"in an other ws"<<r<<std::endl;
+
941  r=item.second.get()->var(name.c_str())->getVal();
+
942  found=true;
+
943  }
+
944  }
+
945  return r;
+
946  }
+
947 
+
948 void CombineHarvester::setParInWs(const std::string name,double value) {
+
949  for (auto & item : wspaces_) {
+
950  if (item.second.get()->var(name.c_str())){
+
951  if ( item.second.get()->var(name.c_str())->getMin() >value) item.second.get()->var(name.c_str())->setMin(value-0.001);
+
952  if ( item.second.get()->var(name.c_str())->getMax() <value) item.second.get()->var(name.c_str())->setMax(value+0.001);
+
953  item.second.get()->var(name.c_str())->setVal(value);
+
954  }
+
955  }
+
956  }
+
957 
+
958 void CombineHarvester::renameParInWs(const std::string& name, const std::string& newName, const std::string& wsName)
+
959 {
+
960  for (auto & item : wspaces_) {
+
961  if ( (wsName=="" or item.first == wsName ) and item.second.get()->var(name.c_str())){
+
962  item.second.get()->var(name.c_str())->SetName(newName.c_str());
+
963  }
+
964  }
+
965 }
+
966 
+
967 }
+ + +
#define FNLOGC(x, y)
Definition: Logging.h:14
+
#define LOGLINE(x, y)
Definition: Logging.h:11
+
#define FNERROR(x)
Definition: Logging.h:9
+
#define FNLOG(x)
Definition: Logging.h:13
+ -
static std::ostream & PrintHeader(std::ostream &out)
Definition: Parameter.cc:62
- -
CombineHarvester & PrintParams()
-
bool GetFlag(std::string const &flag) const
-
#define FNERROR(x)
Definition: Logging.h:9
- -
CombineHarvester deep()
Creates and retunrs a deep copy of the CombineHarvester instance.
- -
void AddExtArgValue(std::string const &name, double const &value)
-
#define FNLOGC(x, y)
Definition: Logging.h:14
-
void ZeroNegativeBins(TH1 *h)
Definition: Utilities.cc:349
-
std::set< std::string > bin_set()
-
void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
-
CombineHarvester & operator=(CombineHarvester other)
-
std::set< std::string > GetAutoMCStatsBins() const
-
double getParFromWs(const std::string name)
-
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
Definition: Utilities.cc:18
-
Definition: Algorithm.h:10
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
void SetAutoMCStats(CombineHarvester &target, double thresh, bool sig=false, int mode=1)
-
void set_err_d(double const &err_d)
Definition: Parameter.h:36
-
bool HasNegativeBins(TH1 const *h)
Definition: Utilities.cc:339
+ +
CombineHarvester & PrintObs()
-
CombineHarvester & PrintSysts()
-
void setParInWs(const std::string name, double value)
+ +
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
void RenameAutoMCStatsBin(std::string const &oldname, std::string const &newname)
+
void renameParInWs(const std::string &name, const std::string &newName, const std::string &wsName="")
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Observation.cc:128
-
void RenameAutoMCStatsBin(std::string const &oldname, std::string const &newname)
-
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-
#define LOGLINE(x, y)
Definition: Logging.h:11
- +
void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
+
CombineHarvester & operator=(CombineHarvester other)
CombineHarvester & PrintAll()
- - -
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
+
friend void swap(CombineHarvester &first, CombineHarvester &second)
+ +
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
void SetAutoMCStats(CombineHarvester &target, double thresh, bool sig=false, int mode=1)
+
std::set< std::string > bin_set()
+
bool GetFlag(std::string const &flag) const
+
CombineHarvester & PrintParams()
+
std::set< std::string > GetAutoMCStatsBins() const
+
CombineHarvester & PrintProcs()
+
CombineHarvester deep()
Creates and retunrs a deep copy of the CombineHarvester instance.
+
CombineHarvester & PrintSysts()
+
double getParFromWs(const std::string name)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
void AddExtArgValue(std::string const &name, double const &value)
+
void setParInWs(const std::string name, double value)
+ +
TH1 const * shape() const
Definition: Observation.h:27
+
static std::ostream & PrintHeader(std::ostream &out)
Definition: Observation.cc:128
RooAbsData const * data() const
Definition: Observation.h:35
- +
void set_err_u(double const &err_u)
Definition: Parameter.h:33
+
void set_err_d(double const &err_d)
Definition: Parameter.h:36
+
static std::ostream & PrintHeader(std::ostream &out)
Definition: Parameter.cc:62
+
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
+
static std::ostream & PrintHeader(std::ostream &out)
Definition: Systematic.cc:251
+
Definition: Algorithm.h:10
+
bool HasNegativeBins(TH1 const *h)
Definition: Utilities.cc:339
+
void swap(CombineHarvester &first, CombineHarvester &second)
std::unique_ptr< TH1 > GetClonedTH1(TFile *file, std::string const &path)
Definition: TFileIO.cc:12
-
void swap(CombineHarvester &first, CombineHarvester &second)
- -
bool IsPdf() const
Definition: HistMapping.cc:21
-
void renameParInWs(const std::string &name, const std::string &newName, const std::string &wsName="")
-
#define FNLOG(x)
Definition: Logging.h:13
- -
friend void swap(CombineHarvester &first, CombineHarvester &second)
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
-
TH1 const * shape() const
Definition: Observation.h:27
+
void ZeroNegativeBins(TH1 *h)
Definition: Utilities.cc:349
+
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
Definition: Utilities.cc:18
+ + diff --git a/_combine_harvester_8h.html b/_combine_harvester_8h.html index 132af1c8b00..e8b45a7c8e5 100644 --- a/_combine_harvester_8h.html +++ b/_combine_harvester_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/CombineHarvester.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_combine_harvester_8h_source.html b/_combine_harvester_8h_source.html index da2c0e9c1c3..c74a3a8b0b3 100644 --- a/_combine_harvester_8h_source.html +++ b/_combine_harvester_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/CombineHarvester.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -294,7 +291,7 @@
406  std::vector<std::string> channel,
407  std::vector<std::string> procs,
408  ch::Categories bin, bool signal);
-
409 
+
409  void AddSystVar(std::string const& name, double val, double err);
410  void AddSystFromProc(Process const& proc, std::string const& name,
411  std::string const& type, bool asymm, double val_u,
412  double val_d, std::string const& formula,
@@ -407,303 +404,308 @@
544  void SetupRateParamFunc(std::string const& name, std::string const& formula,
545  std::string const& pars);
546  void SetupRateParamWspObj(std::string const& name, std::string const& obj, bool is_ext_arg = false);
-
547  // ---------------------------------------------------------------
-
548  // Private methods for the shape writing routines
-
549  // ---------------------------------------------------------------
-
550  void WriteHistToFile(
-
551  TH1 * hist,
-
552  TFile * file,
-
553  std::vector<HistMapping> const& mappings,
-
554  std::string const& bin,
-
555  std::string const& process,
-
556  std::string const& mass,
-
557  std::string const& nuisance,
-
558  unsigned type);
-
559 
-
560 void FillHistMappings(std::vector<HistMapping> & mappings);
-
561 
-
562  // ---------------------------------------------------------------
-
563  // Private methods for shape/yield evaluation
-
564  // --> implementation in src/CombineHarvester_Evaluate.cc
-
565  // ---------------------------------------------------------------
-
566  typedef std::vector<std::vector<Systematic const*>> ProcSystMap;
-
567  ProcSystMap GenerateProcSystMap();
-
568 
-
569  double GetRateInternal(ProcSystMap const& lookup,
-
570  std::string const& single_sys = "");
-
571 
-
572  TH1F GetShapeInternal(ProcSystMap const& lookup,
-
573  std::string const& single_sys = "");
-
574 
-
575  inline double smoothStepFunc(double x) const {
-
576  if (std::fabs(x) >= 1.0/*_smoothRegion*/) return x > 0 ? +1 : -1;
-
577  double xnorm = x/1.0;/*_smoothRegion*/
-
578  double xnorm2 = xnorm*xnorm;
-
579  return 0.125 * xnorm * (xnorm2 * (3.*xnorm2 - 10.) + 15);
-
580  }
-
581 
-
582  double logKappaForX(double x, double k_low, double k_high) const;
-
583 
-
584  void ShapeDiff(double x, TH1F* target, TH1 const* nom, TH1 const* low,
-
585  TH1 const* high, bool linear);
-
586  void ShapeDiff(double x, TH1F* target, RooDataHist const* nom,
-
587  RooDataHist const* low, RooDataHist const* high);
-
588 };
+
547  bool SetupRateParamWspObjFromWsStore(std::string const& name, std::string const& obj, std::map<std::string, std::shared_ptr<RooWorkspace>> const& ws_store);
+
548  // ---------------------------------------------------------------
+
549  // Private methods for the shape writing routines
+
550  // ---------------------------------------------------------------
+
551  void WriteHistToFile(
+
552  TH1 * hist,
+
553  TFile * file,
+
554  std::vector<HistMapping> const& mappings,
+
555  std::string const& bin,
+
556  std::string const& process,
+
557  std::string const& mass,
+
558  std::string const& nuisance,
+
559  unsigned type);
+
560 
+
561 void FillHistMappings(std::vector<HistMapping> & mappings);
+
562 
+
563  // ---------------------------------------------------------------
+
564  // Private methods for shape/yield evaluation
+
565  // --> implementation in src/CombineHarvester_Evaluate.cc
+
566  // ---------------------------------------------------------------
+
567  typedef std::vector<std::vector<Systematic const*>> ProcSystMap;
+
568  ProcSystMap GenerateProcSystMap();
+
569 
+
570  double GetRateInternal(ProcSystMap const& lookup,
+
571  std::string const& single_sys = "");
+
572 
+
573  TH1F GetShapeInternal(ProcSystMap const& lookup,
+
574  std::string const& single_sys = "");
+
575 
+
576  inline double smoothStepFunc(double x) const {
+
577  if (std::fabs(x) >= 1.0/*_smoothRegion*/) return x > 0 ? +1 : -1;
+
578  double xnorm = x/1.0;/*_smoothRegion*/
+
579  double xnorm2 = xnorm*xnorm;
+
580  return 0.125 * xnorm * (xnorm2 * (3.*xnorm2 - 10.) + 15);
+
581  }
+
582 
+
583  double logKappaForX(double x, double k_low, double k_high) const;
+
584 
+
585  void ShapeDiff(double x, TH1F* target, TH1 const* nom, TH1 const* low,
+
586  TH1 const* high, bool linear);
+
587  void ShapeDiff(double x, TH1F* target, RooDataHist const* nom,
+
588  RooDataHist const* low, RooDataHist const* high);
589 
-
590 
-
591 // ---------------------------------------------------------------
-
592 // Template method implementation
-
593 // ---------------------------------------------------------------
-
594 template <typename T, typename R>
-
595 std::set<R> CombineHarvester::SetFromAll(T func) {
-
596  std::set<R> ret;
-
597  for (auto const& item : obs_) ret.insert(func(item.get()));
-
598  for (auto const& item : procs_) ret.insert(func(item.get()));
-
599  for (auto const& item : systs_) ret.insert(func(item.get()));
-
600  return ret;
-
601 };
-
602 
-
603 template <typename T, typename R>
-
604 std::set<R> CombineHarvester::SetFromObs(T func) {
-
605  std::set<R> ret;
-
606  for (auto const& item : obs_) ret.insert(func(item.get()));
-
607  return ret;
-
608 };
-
609 
-
610 template <typename T, typename R>
-
611 std::set<R> CombineHarvester::SetFromProcs(T func) {
-
612  std::set<R> ret;
-
613  for (auto const& item : procs_) ret.insert(func(item.get()));
-
614  return ret;
-
615 };
-
616 
-
617 template <typename T, typename R>
-
618 std::set<R> CombineHarvester::SetFromSysts(T func) {
-
619  std::set<R> ret;
-
620  for (auto const& item : systs_) ret.insert(func(item.get()));
-
621  return ret;
-
622 };
-
623 
-
624 template<typename Function>
-
625 void CombineHarvester::ForEachObj(Function func) {
-
626  ForEachObs(func);
-
627  ForEachProc(func);
-
628  ForEachSyst(func);
-
629 }
-
630 
-
631 template<typename Function>
-
632 void CombineHarvester::ForEachProc(Function func) {
-
633  for (auto & item: procs_) func(item.get());
-
634 }
-
635 
-
636 template<typename Function>
-
637 void CombineHarvester::ForEachObs(Function func) {
-
638  for (auto & item: obs_) func(item.get());
-
639 }
-
640 
-
641 template<typename Function>
-
642 void CombineHarvester::ForEachSyst(Function func) {
-
643  for (auto & item: systs_) func(item.get());
-
644 }
-
645 
-
646 template<typename Function>
- -
648  FilterObs(func);
-
649  FilterProcs(func);
-
650  FilterSysts(func);
-
651  return *this;
-
652 }
-
653 
-
654 template<typename Function>
- -
656  boost::remove_erase_if(
-
657  obs_, [&](std::shared_ptr<Observation> ptr) { return func(ptr.get());
-
658  });
-
659  return *this;
-
660 }
-
661 
-
662 template<typename Function>
- -
664  boost::remove_erase_if(
-
665  procs_, [&](std::shared_ptr<Process> ptr) { return func(ptr.get());
-
666  });
-
667  return *this;
-
668 }
-
669 template<typename Function>
- -
671  boost::remove_erase_if(
-
672  systs_, [&](std::shared_ptr<Systematic> ptr) { return func(ptr.get());
-
673  });
-
674  return *this;
-
675 }
-
676 
-
677 template <class Map>
- -
679  std::string const& name, std::string const& type,
-
680  Map const& valmap) {
-
681  // Keep track of which Process entries get a Systematic assigned and which
-
682  // don't. If verbosity is on we'll print lists of these processes at the end.
-
683  std::vector<ch::Process *> not_added_procs;
-
684  std::vector<ch::Process *> added_procs;
-
685  // Also track which tuples in the map did not get used. Do this by getting the
-
686  // full map here and then removing elements as they are used to create a
-
687  // Systematic.
-
688  auto tuples = valmap.GetTupleSet();
-
689  if (verbosity_ >= 1) {
-
690  log() << (name + ":" + type) << "\n";
-
691  }
-
692  for (unsigned i = 0; i < procs_.size(); ++i) {
-
693  if (!valmap.Contains(procs_[i].get())) {
-
694  not_added_procs.push_back(procs_[i].get());
-
695  continue;
-
696  }
-
697  tuples.erase(valmap.GetTuple(procs_[i].get()));
-
698  added_procs.push_back(procs_[i].get());
-
699  double val_u = valmap.ValU(procs_[i].get());
-
700  double val_d = valmap.ValD(procs_[i].get());
-
701  std::string formula = valmap.Formula(procs_[i].get());
-
702  std::string args = valmap.Args(procs_[i].get());
-
703  target.AddSystFromProc(*(procs_[i]), name, type, valmap.IsAsymm(),
-
704  val_u, val_d, formula, args);
-
705  }
-
706  if (tuples.size() && verbosity_ >= 1) {
-
707  log() << ">> Map keys that were not used to create a Systematic:\n";
-
708  for (auto s : tuples) {
-
709  log() << ch::Tuple2String(s) << "\n";
-
710  }
-
711  }
-
712  if (verbosity_ >= 2) {
-
713  Process::PrintHeader(log());
-
714  log() << ">> Process entries that did not get a Systematic:\n";
-
715  for (auto p : not_added_procs) {
-
716  log() << *p << "\n";
-
717  }
-
718  log() << ">> Process entries that did get a Systematic:\n";
-
719  for (auto p : added_procs) {
+
590  // bug fix for RooConstVar compatibility between ROOT626 and workspace created with earlier versions
+
591  RooWorkspace* fixRooConstVar(RooWorkspace *win, bool useRooRealVar=true, bool clean=true);
+
592 };
+
593 
+
594 
+
595 // ---------------------------------------------------------------
+
596 // Template method implementation
+
597 // ---------------------------------------------------------------
+
598 template <typename T, typename R>
+
599 std::set<R> CombineHarvester::SetFromAll(T func) {
+
600  std::set<R> ret;
+
601  for (auto const& item : obs_) ret.insert(func(item.get()));
+
602  for (auto const& item : procs_) ret.insert(func(item.get()));
+
603  for (auto const& item : systs_) ret.insert(func(item.get()));
+
604  return ret;
+
605 };
+
606 
+
607 template <typename T, typename R>
+
608 std::set<R> CombineHarvester::SetFromObs(T func) {
+
609  std::set<R> ret;
+
610  for (auto const& item : obs_) ret.insert(func(item.get()));
+
611  return ret;
+
612 };
+
613 
+
614 template <typename T, typename R>
+
615 std::set<R> CombineHarvester::SetFromProcs(T func) {
+
616  std::set<R> ret;
+
617  for (auto const& item : procs_) ret.insert(func(item.get()));
+
618  return ret;
+
619 };
+
620 
+
621 template <typename T, typename R>
+
622 std::set<R> CombineHarvester::SetFromSysts(T func) {
+
623  std::set<R> ret;
+
624  for (auto const& item : systs_) ret.insert(func(item.get()));
+
625  return ret;
+
626 };
+
627 
+
628 template<typename Function>
+
629 void CombineHarvester::ForEachObj(Function func) {
+
630  ForEachObs(func);
+
631  ForEachProc(func);
+
632  ForEachSyst(func);
+
633 }
+
634 
+
635 template<typename Function>
+
636 void CombineHarvester::ForEachProc(Function func) {
+
637  for (auto & item: procs_) func(item.get());
+
638 }
+
639 
+
640 template<typename Function>
+
641 void CombineHarvester::ForEachObs(Function func) {
+
642  for (auto & item: obs_) func(item.get());
+
643 }
+
644 
+
645 template<typename Function>
+
646 void CombineHarvester::ForEachSyst(Function func) {
+
647  for (auto & item: systs_) func(item.get());
+
648 }
+
649 
+
650 template<typename Function>
+ +
652  FilterObs(func);
+
653  FilterProcs(func);
+
654  FilterSysts(func);
+
655  return *this;
+
656 }
+
657 
+
658 template<typename Function>
+ +
660  boost::remove_erase_if(
+
661  obs_, [&](std::shared_ptr<Observation> ptr) { return func(ptr.get());
+
662  });
+
663  return *this;
+
664 }
+
665 
+
666 template<typename Function>
+ +
668  boost::remove_erase_if(
+
669  procs_, [&](std::shared_ptr<Process> ptr) { return func(ptr.get());
+
670  });
+
671  return *this;
+
672 }
+
673 template<typename Function>
+ +
675  boost::remove_erase_if(
+
676  systs_, [&](std::shared_ptr<Systematic> ptr) { return func(ptr.get());
+
677  });
+
678  return *this;
+
679 }
+
680 
+
681 template <class Map>
+ +
683  std::string const& name, std::string const& type,
+
684  Map const& valmap) {
+
685  // Keep track of which Process entries get a Systematic assigned and which
+
686  // don't. If verbosity is on we'll print lists of these processes at the end.
+
687  std::vector<ch::Process *> not_added_procs;
+
688  std::vector<ch::Process *> added_procs;
+
689  // Also track which tuples in the map did not get used. Do this by getting the
+
690  // full map here and then removing elements as they are used to create a
+
691  // Systematic.
+
692  auto tuples = valmap.GetTupleSet();
+
693  if (verbosity_ >= 1) {
+
694  log() << (name + ":" + type) << "\n";
+
695  }
+
696  for (unsigned i = 0; i < procs_.size(); ++i) {
+
697  if (!valmap.Contains(procs_[i].get())) {
+
698  not_added_procs.push_back(procs_[i].get());
+
699  continue;
+
700  }
+
701  tuples.erase(valmap.GetTuple(procs_[i].get()));
+
702  added_procs.push_back(procs_[i].get());
+
703  double val_u = valmap.ValU(procs_[i].get());
+
704  double val_d = valmap.ValD(procs_[i].get());
+
705  std::string formula = valmap.Formula(procs_[i].get());
+
706  std::string args = valmap.Args(procs_[i].get());
+
707  target.AddSystFromProc(*(procs_[i]), name, type, valmap.IsAsymm(),
+
708  val_u, val_d, formula, args);
+
709  }
+
710  if (tuples.size() && verbosity_ >= 1) {
+
711  log() << ">> Map keys that were not used to create a Systematic:\n";
+
712  for (auto s : tuples) {
+
713  log() << ch::Tuple2String(s) << "\n";
+
714  }
+
715  }
+
716  if (verbosity_ >= 2) {
+
717  Process::PrintHeader(log());
+
718  log() << ">> Process entries that did not get a Systematic:\n";
+
719  for (auto p : not_added_procs) {
720  log() << *p << "\n";
721  }
-
722  }
-
723 }
-
724 }
-
725 
-
726 #endif
-
- -
void ExtractData(std::string const &ws_name, std::string const &rule)
-
CombineHarvester & FilterSysts(Function func)
-
std::set< std::string > channel_set()
-
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
-
void ForEachProc(Function func)
-
void AddDatacardLineAtEnd(std::string const &line)
Add a line of text at the end of all datacards.
-
void AddWorkspace(RooWorkspace const &ws, bool can_rename=false)
- -
CombineHarvester & PrintProcs()
-
void ForEachObs(Function func)
-
void ForEachObj(Function func)
-
TH2F GetRateCovariance(RooFitResult const &fit, unsigned n_samples)
- -
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
-
void RenameGroup(std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group.
-
std::set< std::string > process_set()
-
std::set< R > SetFromAll(T func)
Fill an std::set with the return values from an arbitrary function.
- +
722  log() << ">> Process entries that did get a Systematic:\n";
+
723  for (auto p : added_procs) {
+
724  log() << *p << "\n";
+
725  }
+
726  }
+
727 }
+
728 }
+
729 
+
730 #endif
-
CombineHarvester & PrintParams()
-
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
-
void VariableRebin(std::vector< double > bins)
-
bool GetFlag(std::string const &flag) const
- + + -
void CreateParameterIfEmpty(std::string const &name)
- -
void InsertProcess(ch::Process const &proc)
-
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+ + +
void SetVerbosity(unsigned verbosity)
- +
void AddSystFromProc(Process const &proc, std::string const &name, std::string const &type, bool asymm, double val_u, double val_d, std::string const &formula, std::string const &args)
+
TH2F GetRateCovariance(RooFitResult const &fit, unsigned n_samples)
+
void ZeroBins(double min, double max)
+ +
CombineHarvester & process_rgx(std::vector< std::string > const &vec, bool cond=true)
-
std::vector< std::pair< int, std::string > > Categories
-
CombineHarvester & FilterProcs(Function func)
- -
void AddBinByBin(double threshold, bool fixed_norm, CombineHarvester *other)
Create bin-by-bin uncertainties.
-
CombineHarvester deep()
Creates and retunrs a deep copy of the CombineHarvester instance.
-
CombineHarvester & FilterObs(Function func)
-
void InsertObservation(ch::Observation const &obs)
+
void AddWorkspace(RooWorkspace const &ws, bool can_rename=false)
CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
- -
void UpdateParameters(std::vector< ch::Parameter > const &params)
- - - -
void AddExtArgValue(std::string const &name, double const &value)
-
ch::Parameter const * GetParameter(std::string const &name) const
-
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
-
std::set< std::string > syst_name_set()
-
CombineHarvester & backgrounds()
-
void ClearDatacardLinesAtEnd()
Clear all added datacard lines.
- -
void AddSystFromProc(Process const &proc, std::string const &name, std::string const &type, bool asymm, double val_u, double val_d, std::string const &formula, std::string const &args)
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)
-
std::set< std::string > bin_set()
-
void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
-
void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
-
CombineHarvester & operator=(CombineHarvester other)
-
std::set< std::string > GetAutoMCStatsBins() const
-
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
-
void SetPdfBins(unsigned nbins)
-
double getParFromWs(const std::string name)
-
void MergeBinErrors(double bbb_threshold, double merge_threshold)
Merge bin errors within a bin.
+
CombineHarvester & backgrounds()
+
void AddBinByBin(double threshold, bool fixed_norm, CombineHarvester *other)
Create bin-by-bin uncertainties.
CombineHarvester & signals()
-
std::set< std::string > mass_set()
- - -
std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
-
Definition: Algorithm.h:10
-
void InsertSystematic(ch::Systematic const &sys)
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
void SetAutoMCStats(CombineHarvester &target, double thresh, bool sig=false, int mode=1)
-
std::vector< ch::Parameter > GetParameters() const
-
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
-
CombineHarvester & histograms()
+
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
+
void RenameParameter(std::string const &oldname, std::string const &newname)
CombineHarvester & PrintObs()
-
std::set< std::string > era_set()
- -
CombineHarvester & FilterAll(Function func)
- -
void RemoveGroup(std::string const &name, std::vector< std::string > const &patterns)
Remove parameters to a given group.
- -
CombineHarvester & PrintSysts()
-
void setParInWs(const std::string name, double value)
-
std::set< std::string > analysis_set()
-
std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
- - -
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...
- -
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)
-
TH2F GetRateCorrelation(RooFitResult const &fit, unsigned n_samples)
-
void RenameAutoMCStatsBin(std::string const &oldname, std::string const &newname)
-
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
- -
void ForEachSyst(Function func)
-
CombineHarvester & PrintAll()
-
void ExtractPdfs(CombineHarvester &target, std::string const &ws_name, std::string const &rule, std::string norm_rule="")
-
void RenameParameter(std::string const &oldname, std::string const &newname)
-
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)
+
void AddSystVar(std::string const &name, double val, double err)
+
void CreateParameterIfEmpty(std::string const &name)
+
TH2F GetRateCorrelation(RooFitResult const &fit, unsigned n_samples)
-
void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
-
std::string Tuple2String(const std::tuple< Args... > &t)
Format any std::tuple as a string.
Definition: Utilities.h:214
+
CombineHarvester & FilterObs(Function func)
+
void MergeBinErrors(double bbb_threshold, double merge_threshold)
Merge bin errors within a bin.
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
void ForEachSyst(Function func)
+ +
void ForEachProc(Function func)
+
void RenameAutoMCStatsBin(std::string const &oldname, std::string const &newname)
+
std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
+
void renameParInWs(const std::string &name, const std::string &newName, const std::string &wsName="")
+ +
void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
+
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
+ +
CombineHarvester & operator=(CombineHarvester other)
+
std::set< std::string > process_set()
+
void AddDatacardLineAtEnd(std::string const &line)
Add a line of text at the end of all datacards.
+
void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
+
void WriteDatacard(std::string const &name, std::string const &root_file)
CombineHarvester & attr(std::vector< std::string > const &vec, std::string attr_label, bool cond=true)
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
- -
void WriteDatacard(std::string const &name, std::string const &root_file)
-
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
+
CombineHarvester & PrintAll()
+
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
+
friend void swap(CombineHarvester &first, CombineHarvester &second)
+
std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
std::set< std::string > syst_type_set()
-
void renameParInWs(const std::string &name, const std::string &newName, const std::string &wsName="")
+ + +
void RenameGroup(std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group.
+
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
void SetAutoMCStats(CombineHarvester &target, double thresh, bool sig=false, int mode=1)
+
void UpdateParameters(std::vector< ch::Parameter > const &params)
+
std::set< std::string > mass_set()
+
std::set< std::string > bin_set()
+
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
+
void InsertProcess(ch::Process const &proc)
+
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)
+
void ForEachObs(Function func)
+
CombineHarvester & FilterSysts(Function func)
+
bool GetFlag(std::string const &flag) const
+ +
void VariableRebin(std::vector< double > bins)
+
std::set< std::string > era_set()
+
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)
+
std::set< std::string > channel_set()
+
CombineHarvester & FilterAll(Function func)
+
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+
CombineHarvester & FilterProcs(Function func)
+
CombineHarvester & PrintParams()
+
CombineHarvester & histograms()
+
void InsertSystematic(ch::Systematic const &sys)
+
std::set< std::string > GetAutoMCStatsBins() const
+
void RemoveGroup(std::string const &name, std::vector< std::string > const &patterns)
Remove parameters to a given group.
+
std::set< std::string > syst_name_set()
+
void ExtractData(std::string const &ws_name, std::string const &rule)
+
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 & PrintProcs()
+ +
CombineHarvester deep()
Creates and retunrs a deep copy of the CombineHarvester instance.
+
void InsertObservation(ch::Observation const &obs)
+
CombineHarvester & PrintSysts()
+
std::vector< ch::Parameter > GetParameters() const
+
std::set< std::string > analysis_set()
+
double getParFromWs(const std::string name)
+
void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
+
void SetPdfBins(unsigned nbins)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
void ForEachObj(Function func)
+
void AddExtArgValue(std::string const &name, double const &value)
+
ch::Parameter const * GetParameter(std::string const &name) const
+
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
+
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
+
void setParInWs(const std::string name, double value)
+
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 ExtractPdfs(CombineHarvester &target, std::string const &ws_name, std::string const &rule, std::string norm_rule="")
+ -
void ZeroBins(double min, double max)
-
friend void swap(CombineHarvester &first, CombineHarvester &second)
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+ + +
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
+ + +
Definition: Algorithm.h:10
+
std::string Tuple2String(const std::tuple< Args... > &t)
Format any std::tuple as a string.
Definition: Utilities.h:214
+
std::vector< std::pair< int, std::string > > Categories
+ + + + diff --git a/_combine_harvester___creation_8cc.html b/_combine_harvester___creation_8cc.html index 98f6d2f03e7..2b0a69a4092 100644 --- a/_combine_harvester___creation_8cc.html +++ b/_combine_harvester___creation_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester_Creation.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_combine_harvester___creation_8cc_source.html b/_combine_harvester___creation_8cc_source.html index a5c63a52e01..a50fd126c75 100644 --- a/_combine_harvester___creation_8cc_source.html +++ b/_combine_harvester___creation_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester_Creation.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -133,10 +130,10 @@
25  ch::Categories bin) {
26  std::vector<unsigned> lengths = {
27  unsigned(mass.size()),
-
28  unsigned(analysis.size()),
-
29  unsigned(era.size()),
-
30  unsigned(channel.size()),
-
31  unsigned(bin.size())};
+
28  unsigned(analysis.size()),
+
29  unsigned(era.size()),
+
30  unsigned(channel.size()),
+
31  unsigned(bin.size())};
32  auto comb = ch::GenerateCombinations(lengths);
33  for (auto const& c : comb) {
34  auto obs = std::make_shared<Observation>();
@@ -160,10 +157,10 @@
52  bool signal) {
53  std::vector<unsigned> lengths = {
54  unsigned(mass.size()),
-
55  unsigned(analysis.size()),
-
56  unsigned(era.size()),
-
57  unsigned(channel.size()),
-
58  unsigned(bin.size())};
+
55  unsigned(analysis.size()),
+
56  unsigned(era.size()),
+
57  unsigned(channel.size()),
+
58  unsigned(bin.size())};
59  auto comb = ch::GenerateCombinations(lengths);
60  for (auto const& c : comb) {
61  for (unsigned i = 0; i < procs.size(); ++i) {
@@ -198,7 +195,7 @@
90  boost::replace_all(subbed_name, "$ANALYSIS", proc.analysis());
91  std::map<std::string,std::string> attrs = proc.all_attributes();
92  for( const auto it : attrs){
-
93  boost::replace_all(subbed_name, "$ATTR("+it.first+")",proc.attribute(it.first));
+
93  boost::replace_all(subbed_name, "$ATTR("+it.first+")",proc.attribute(it.first));
94  }
95  auto sys = std::make_shared<Systematic>();
96  ch::SetProperties(sys.get(), &proc);
@@ -230,7 +227,7 @@
122  boost::replace_all(subbed_args, "$CHANNEL", proc.channel());
123  boost::replace_all(subbed_args, "$ANALYSIS", proc.analysis());
124  for( const auto it : attrs){
-
125  boost::replace_all(subbed_args, "$ATTR("+it.first+")",proc.attribute(it.first));
+
125  boost::replace_all(subbed_args, "$ATTR("+it.first+")",proc.attribute(it.first));
126  }
127  SetupRateParamFunc(subbed_name, formula, subbed_args);
128  }
@@ -242,181 +239,197 @@
134  systs_.push_back(sys);
135 }
136 
-
137 void CombineHarvester::RenameSystematic(CombineHarvester &target, std::string const& old_name,
-
138  std::string const& new_name) {
-
139  for(unsigned i = 0; i<systs_.size(); ++i){
-
140  if(systs_[i]->name()==old_name){
-
141  systs_[i]->set_name(new_name);
-
142  target.CreateParameterIfEmpty(systs_[i]->name());
-
143  }
-
144  }
-
145 }
-
146 
-
147 void CombineHarvester::ExtractShapes(std::string const& file,
-
148  std::string const& rule,
-
149  std::string const& syst_rule) {
-
150  std::vector<HistMapping> mapping(1);
-
151  mapping[0].process = "*";
-
152  mapping[0].category = "*";
-
153  mapping[0].file = std::make_shared<TFile>(file.c_str());
-
154  mapping[0].pattern = rule;
-
155  mapping[0].syst_pattern = syst_rule;
-
156 
-
157  // Note that these LoadShapes calls will fail if we encounter
-
158  // any object that already has shapes
-
159  for (unsigned i = 0; i < obs_.size(); ++i) {
-
160  if (obs_[i]->shape() || obs_[i]->data()) continue;
-
161  LoadShapes(obs_[i].get(), mapping);
-
162  }
-
163  for (unsigned i = 0; i < procs_.size(); ++i) {
-
164  if (procs_[i]->shape() || procs_[i]->pdf()) continue;
-
165  LoadShapes(procs_[i].get(), mapping);
-
166  }
-
167  if (syst_rule == "") return;
-
168  for (unsigned i = 0; i < systs_.size(); ++i) {
-
169  if (systs_[i]->type() != "shape" && systs_[i]->type() != "shapeN2" &&
-
170  systs_[i]->type() != "shapeU")
-
171  continue;
-
172  LoadShapes(systs_[i].get(), mapping);
-
173  }
-
174 }
-
175 
-
176 void CombineHarvester::AddWorkspace(RooWorkspace const& ws,
-
177  bool can_rename) {
-
178  SetupWorkspace(ws, can_rename);
-
179 }
-
180 
- -
182  std::string const& ws_name,
-
183  std::string const& rule,
-
184  std::string norm_rule) {
-
185  std::vector<HistMapping> mapping(1);
-
186  mapping[0].process = "*";
-
187  mapping[0].category = "*";
-
188  mapping[0].pattern = ws_name+":"+rule;
-
189  if (norm_rule != "") mapping[0].syst_pattern = ws_name + ":" + norm_rule;
-
190  if (!wspaces_.count(ws_name)) return;
-
191  mapping[0].ws = wspaces_.at(ws_name);
-
192  for (unsigned i = 0; i < procs_.size(); ++i) {
-
193  if (!procs_[i]->pdf()) {
-
194  target.LoadShapes(procs_[i].get(), mapping);
-
195  }
-
196  }
-
197 }
-
198 
-
199 void CombineHarvester::ExtractData(std::string const &ws_name,
-
200  std::string const &rule) {
-
201  std::vector<HistMapping> mapping(1);
-
202  mapping[0].process = "*";
-
203  mapping[0].category = "*";
-
204  mapping[0].pattern = ws_name+":"+rule;
-
205  if (!wspaces_.count(ws_name)) return;
-
206  mapping[0].ws = wspaces_.at(ws_name);
-
207  for (unsigned i = 0; i < obs_.size(); ++i) {
-
208  if (!obs_[i]->data()) {
-
209  LoadShapes(obs_[i].get(), mapping);
-
210  }
-
211  }
-
212 }
-
213 
-
214 void CombineHarvester::AddBinByBin(double threshold, bool fixed_norm,
-
215  CombineHarvester &other) {
-
216  AddBinByBin(threshold, fixed_norm, &other);
-
217 }
-
218 
-
219 void CombineHarvester::AddBinByBin(double threshold, bool fixed_norm,
-
220  CombineHarvester *other) {
-
221  auto bbb_factory = ch::BinByBinFactory()
-
222  .SetAddThreshold(threshold)
-
223  .SetFixNorm(fixed_norm)
-
224  .SetVerbosity(verbosity_);
-
225  bbb_factory.AddBinByBin(*this, *other);
-
226 }
-
227 
-
228 void CombineHarvester::CreateParameterIfEmpty(std::string const &name) {
-
229  if (!params_.count(name)) {
-
230  auto param = std::make_shared<Parameter>(Parameter());
-
231  param->set_name(name);
-
232  params_.insert({name, param});
-
233  }
-
234 }
-
235 
-
236 void CombineHarvester::MergeBinErrors(double bbb_threshold,
-
237  double merge_threshold) {
-
238  auto bbb_factory = ch::BinByBinFactory()
-
239  .SetAddThreshold(bbb_threshold)
-
240  .SetMergeThreshold(merge_threshold)
-
241  .SetVerbosity(verbosity_);
-
242  bbb_factory.MergeBinErrors(*this);
-
243 }
-
244 
- -
246  obs_.push_back(std::make_shared<ch::Observation>(obs));
-
247 }
-
248 
- -
250  procs_.push_back(std::make_shared<ch::Process>(proc));
-
251 }
-
252 
- -
254  systs_.push_back(std::make_shared<ch::Systematic>(sys));
+
137 void CombineHarvester::AddSystVar(std::string const& name,
+
138  double val, double err) {
+
139  Parameter * param = SetupRateParamVar(name,val);
+
140  param->set_val(val);
+
141  param->set_err_u(+1.0 *err);
+
142  param->set_err_d(-1.0 *err);
+
143  auto sys = std::make_shared<Systematic>();
+
144  sys->set_name(name);
+
145  sys->set_type("param");
+
146  systs_.push_back(sys);
+
147 }
+
148 
+
149 void CombineHarvester::RenameSystematic(CombineHarvester &target, std::string const& old_name,
+
150  std::string const& new_name) {
+
151  for(unsigned i = 0; i<systs_.size(); ++i){
+
152  if(systs_[i]->name()==old_name){
+
153  systs_[i]->set_name(new_name);
+
154  target.CreateParameterIfEmpty(systs_[i]->name());
+
155  }
+
156  }
+
157 }
+
158 
+
159 void CombineHarvester::ExtractShapes(std::string const& file,
+
160  std::string const& rule,
+
161  std::string const& syst_rule) {
+
162  std::vector<HistMapping> mapping(1);
+
163  mapping[0].process = "*";
+
164  mapping[0].category = "*";
+
165  mapping[0].file = std::make_shared<TFile>(file.c_str());
+
166  mapping[0].pattern = rule;
+
167  mapping[0].syst_pattern = syst_rule;
+
168 
+
169  // Note that these LoadShapes calls will fail if we encounter
+
170  // any object that already has shapes
+
171  for (unsigned i = 0; i < obs_.size(); ++i) {
+
172  if (obs_[i]->shape() || obs_[i]->data()) continue;
+
173  LoadShapes(obs_[i].get(), mapping);
+
174  }
+
175  for (unsigned i = 0; i < procs_.size(); ++i) {
+
176  if (procs_[i]->shape() || procs_[i]->pdf()) continue;
+
177  LoadShapes(procs_[i].get(), mapping);
+
178  }
+
179  if (syst_rule == "") return;
+
180  for (unsigned i = 0; i < systs_.size(); ++i) {
+
181  if (systs_[i]->type() != "shape" && systs_[i]->type() != "shapeN2" &&
+
182  systs_[i]->type() != "shapeU")
+
183  continue;
+
184  LoadShapes(systs_[i].get(), mapping);
+
185  }
+
186 }
+
187 
+
188 void CombineHarvester::AddWorkspace(RooWorkspace const& ws,
+
189  bool can_rename) {
+
190  SetupWorkspace(ws, can_rename);
+
191 }
+
192 
+ +
194  std::string const& ws_name,
+
195  std::string const& rule,
+
196  std::string norm_rule) {
+
197  std::vector<HistMapping> mapping(1);
+
198  mapping[0].process = "*";
+
199  mapping[0].category = "*";
+
200  mapping[0].pattern = ws_name+":"+rule;
+
201  if (norm_rule != "") mapping[0].syst_pattern = ws_name + ":" + norm_rule;
+
202  if (!wspaces_.count(ws_name)) return;
+
203  mapping[0].ws = wspaces_.at(ws_name);
+
204  for (unsigned i = 0; i < procs_.size(); ++i) {
+
205  if (!procs_[i]->pdf()) {
+
206  target.LoadShapes(procs_[i].get(), mapping);
+
207  }
+
208  }
+
209 }
+
210 
+
211 void CombineHarvester::ExtractData(std::string const &ws_name,
+
212  std::string const &rule) {
+
213  std::vector<HistMapping> mapping(1);
+
214  mapping[0].process = "*";
+
215  mapping[0].category = "*";
+
216  mapping[0].pattern = ws_name+":"+rule;
+
217  if (!wspaces_.count(ws_name)) return;
+
218  mapping[0].ws = wspaces_.at(ws_name);
+
219  for (unsigned i = 0; i < obs_.size(); ++i) {
+
220  if (!obs_[i]->data()) {
+
221  LoadShapes(obs_[i].get(), mapping);
+
222  }
+
223  }
+
224 }
+
225 
+
226 void CombineHarvester::AddBinByBin(double threshold, bool fixed_norm,
+
227  CombineHarvester &other) {
+
228  AddBinByBin(threshold, fixed_norm, &other);
+
229 }
+
230 
+
231 void CombineHarvester::AddBinByBin(double threshold, bool fixed_norm,
+
232  CombineHarvester *other) {
+
233  auto bbb_factory = ch::BinByBinFactory()
+
234  .SetAddThreshold(threshold)
+
235  .SetFixNorm(fixed_norm)
+
236  .SetVerbosity(verbosity_);
+
237  bbb_factory.AddBinByBin(*this, *other);
+
238 }
+
239 
+
240 void CombineHarvester::CreateParameterIfEmpty(std::string const &name) {
+
241  if (!params_.count(name)) {
+
242  auto param = std::make_shared<Parameter>(Parameter());
+
243  param->set_name(name);
+
244  params_.insert({name, param});
+
245  }
+
246 }
+
247 
+
248 void CombineHarvester::MergeBinErrors(double bbb_threshold,
+
249  double merge_threshold) {
+
250  auto bbb_factory = ch::BinByBinFactory()
+
251  .SetAddThreshold(bbb_threshold)
+
252  .SetMergeThreshold(merge_threshold)
+
253  .SetVerbosity(verbosity_);
+
254  bbb_factory.MergeBinErrors(*this);
255 }
-
256 }
-
- -
void ExtractData(std::string const &ws_name, std::string const &rule)
-
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
-
void AddWorkspace(RooWorkspace const &ws, bool can_rename=false)
-
BinByBinFactory & SetMergeThreshold(double val)
The threshold for the merging algorithm.
Definition: BinByBin.h:107
+
256 
+ +
258  obs_.push_back(std::make_shared<ch::Observation>(obs));
+
259 }
+
260 
+ +
262  procs_.push_back(std::make_shared<ch::Process>(proc));
+
263 }
+
264 
+ +
266  systs_.push_back(std::make_shared<ch::Systematic>(sys));
+
267 }
+
268 }
+ + + + -
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
-
BinByBinFactory & SetAddThreshold(double val)
Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
Definition: BinByBin.h:99
-
virtual std::string const & era() const
Definition: Object.h:29
- -
void CreateParameterIfEmpty(std::string const &name)
-
virtual std::string const & bin() const
Definition: Object.h:17
- -
void InsertProcess(ch::Process const &proc)
+ + +
Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
Definition: BinByBin.h:21
+
BinByBinFactory & SetAddThreshold(double val)
Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
Definition: BinByBin.h:99
+
BinByBinFactory & SetFixNorm(bool fix)
Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
Definition: BinByBin.h:124
+
void MergeBinErrors(CombineHarvester &cb)
Merges histogram bin errors between processes.
Definition: BinByBin.cc:22
+
BinByBinFactory & SetVerbosity(unsigned verbosity)
By default this class only produces output on the screen when an error occurs, set to a value greater...
Definition: BinByBin.h:90
+
BinByBinFactory & SetMergeThreshold(double val)
The threshold for the merging algorithm.
Definition: BinByBin.h:107
void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
Create bin-by-bin shape uncertainties for every process in src, and add these to dest
Definition: BinByBin.cc:105
-
std::vector< std::pair< int, std::string > > Categories
-
virtual std::string const & channel() const
Definition: Object.h:32
-
void AddBinByBin(double threshold, bool fixed_norm, CombineHarvester *other)
Create bin-by-bin uncertainties.
-
void InsertObservation(ch::Observation const &obs)
- - - - -
virtual std::map< std::string, std::string > const & all_attributes() const
Definition: Object.h:43
+
void AddSystFromProc(Process const &proc, std::string const &name, std::string const &type, bool asymm, double val_u, double val_d, std::string const &formula, std::string const &args)
+
void AddWorkspace(RooWorkspace const &ws, bool can_rename=false)
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)
-
virtual std::string const & analysis() const
Definition: Object.h:26
-
void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
-
BinByBinFactory & SetVerbosity(unsigned verbosity)
By default this class only produces output on the screen when an error occurs, set to a value greater...
Definition: BinByBin.h:90
-
virtual std::string const & mass() const
Definition: Object.h:38
-
void MergeBinErrors(double bbb_threshold, double merge_threshold)
Merge bin errors within a bin.
- -
Definition: Algorithm.h:10
-
void InsertSystematic(ch::Systematic const &sys)
- -
virtual int bin_id() const
Definition: Object.h:35
+
void AddBinByBin(double threshold, bool fixed_norm, CombineHarvester *other)
Create bin-by-bin uncertainties.
+
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
+
void AddSystVar(std::string const &name, double val, double err)
+
void CreateParameterIfEmpty(std::string const &name)
+
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...
+
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
- -
void ExtractPdfs(CombineHarvester &target, std::string const &ws_name, std::string const &rule, std::string norm_rule="")
+
void InsertProcess(ch::Process const &proc)
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)
-
Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
Definition: BinByBin.h:21
- - -
BinByBinFactory & SetFixNorm(bool fix)
Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
Definition: BinByBin.h:124
-
void MergeBinErrors(CombineHarvester &cb)
Merges histogram bin errors between processes.
Definition: BinByBin.cc:22
+
void InsertSystematic(ch::Systematic const &sys)
+
void ExtractData(std::string const &ws_name, std::string const &rule)
+
void InsertObservation(ch::Observation const &obs)
+
void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
+
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 ExtractPdfs(CombineHarvester &target, std::string const &ws_name, std::string const &rule, std::string norm_rule="")
+
virtual std::string const attribute(std::string const &attr_label) const
Definition: Object.h:44
virtual std::string const & process() const
Definition: Object.h:20
-
virtual const std::string attribute(std::string const &attr_label) const
Definition: Object.h:44
- -
std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
Definition: Utilities.cc:191
-
void SetProperties(T *first, U const *second)
Definition: Utilities.h:59
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual int bin_id() const
Definition: Object.h:35
+
virtual std::string const & analysis() const
Definition: Object.h:26
+
virtual std::string const & era() const
Definition: Object.h:29
+
virtual std::string const & mass() const
Definition: Object.h:38
+
virtual std::string const & channel() const
Definition: Object.h:32
+
virtual std::map< std::string, std::string > const & all_attributes() const
Definition: Object.h:43
+ +
void set_err_u(double const &err_u)
Definition: Parameter.h:33
+
void set_err_d(double const &err_d)
Definition: Parameter.h:36
+
void set_val(double const &val)
Definition: Parameter.h:23
+ + +
Definition: Algorithm.h:10
+
void SetProperties(T *first, U const *second)
Definition: Utilities.h:59
+
std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
Definition: Utilities.cc:191
+
std::vector< std::pair< int, std::string > > Categories
+ + + + diff --git a/_combine_harvester___datacards_8cc.html b/_combine_harvester___datacards_8cc.html index 65bae36b565..c9bfbf56e5a 100644 --- a/_combine_harvester___datacards_8cc.html +++ b/_combine_harvester___datacards_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester_Datacards.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -129,6 +126,7 @@ #include "RooRealVar.h"
#include "RooFormulaVar.h"
#include "RooCategory.h"
+#include "RooConstVar.h"
#include "CombineHarvester/CombineTools/interface/Observation.h"
#include "CombineHarvester/CombineTools/interface/Process.h"
#include "CombineHarvester/CombineTools/interface/Systematic.h"
diff --git a/_combine_harvester___datacards_8cc_source.html b/_combine_harvester___datacards_8cc_source.html index ab5c3bd9d89..4b90ce8b563 100644 --- a/_combine_harvester___datacards_8cc_source.html +++ b/_combine_harvester___datacards_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester_Datacards.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -127,1411 +124,1503 @@
19 #include "RooRealVar.h"
20 #include "RooFormulaVar.h"
21 #include "RooCategory.h"
-
22 
- - - - - - - - -
31 #include "CombineHarvester/CombineTools/interface/zstr.hpp"
-
32 namespace ch {
-
33 
-
34 // Extract info from filename using parse rule like:
-
35 // ".*{MASS}/{ANALYSIS}_{CHANNEL}_{BINID}_{ERA}.txt"
-
36 int CombineHarvester::ParseDatacard(std::string const& filename,
-
37  std::string parse_rules) {
-
38  boost::replace_all(parse_rules, "$ANALYSIS", "(?<ANALYSIS>[\\w\\.]+)");
-
39  boost::replace_all(parse_rules, "$ERA", "(?<ERA>[\\w\\.]+)");
-
40  boost::replace_all(parse_rules, "$CHANNEL", "(?<CHANNEL>[\\w\\.]+)");
-
41  boost::replace_all(parse_rules, "$BINID", "(?<BINID>[\\w\\.]+)");
-
42  boost::replace_all(parse_rules, "$MASS", "(?<MASS>[\\w\\.]+)");
-
43  boost::regex rgx(parse_rules);
-
44  boost::smatch matches;
-
45  boost::regex_search(filename, matches, rgx);
-
46  this->ParseDatacard(filename,
-
47  matches.str("ANALYSIS"),
-
48  matches.str("ERA"),
-
49  matches.str("CHANNEL"),
-
50  matches.str("BINID").length() ?
-
51  boost::lexical_cast<int>(matches.str("BINID")) : 0,
-
52  matches.str("MASS"));
-
53  return 0;
-
54 }
-
55 
-
56 int CombineHarvester::ParseDatacard(std::string const& filename,
-
57  std::string const& analysis,
-
58  std::string const& era,
-
59  std::string const& channel,
-
60  int bin_id,
-
61  std::string const& mass) {
-
62  TH1::AddDirectory(kFALSE);
-
63  // Load the entire datacard into memory as a vector of strings
-
64  std::vector<std::string> lines = ch::ParseFileLines(filename);
-
65  // Loop through lines, trimming whitespace at the beginning or end
-
66  // then splitting each line into a vector of words (using any amount
-
67  // of whitespace as the separator). We skip any line of zero length
-
68  // or which starts with a "#" or "-" character.
-
69  std::vector<std::vector<std::string>> words;
-
70  for (unsigned i = 0; i < lines.size(); ++i) {
-
71  boost::trim(lines[i]);
-
72  if (lines[i].size() == 0) continue;
-
73  if (lines[i].at(0) == '#' || lines[i].at(0) == '-') continue;
-
74  words.push_back(std::vector<std::string>());
-
75  boost::split(words.back(), lines[i], boost::is_any_of("\t "),
-
76  boost::token_compress_on);
-
77  }
-
78 
-
79  std::vector<HistMapping> hist_mapping;
-
80  // std::map<std::string, RooAbsData*> data_map;
-
81  std::map<std::string, std::shared_ptr<TFile>> file_store;
-
82  std::map<std::string, std::shared_ptr<RooWorkspace>> ws_store;
-
83 
-
84  bool start_nuisance_scan = false;
-
85  unsigned r = 0;
-
86 
-
87  // We will allow cards that describe a single bin to have an "observation"
-
88  // line without a "bin" line above it. We probably won't know the bin name
-
89  // when we parse this line, so we'll store it here and fix it later
-
90  std::shared_ptr<ch::Observation> single_obs = nullptr;
-
91  std::set<std::string> bin_names;
-
92 
-
93  // Store the groups that we encounter
-
94  std::map<std::string, std::set<std::string>> groups;
+
22 #include "RooConstVar.h"
+
23 
+ + + + + + + + +
32 #include "CombineHarvester/CombineTools/interface/zstr.hpp"
+
33 namespace ch {
+
34 
+
35 // Bug fix for RooConstVar CompatibilityA
+
36 RooWorkspace* CombineHarvester::fixRooConstVar(RooWorkspace *win, bool useRooRealVar, bool clean)
+
37 {
+
38  if ( !GetFlag("fix-rooconstvar")) return win;
+
39  std::cout<<"[INFO]"<< "Running fixRooConstVar on "<<win->GetName()<<std::endl;
+
40  // to fix RooConstVar we need to create a new workspace,
+
41  // import them first and later reimport all the other objects
+
42  std::string name = win->GetName();
+
43  RooWorkspace *wout = new RooWorkspace(name.c_str(), (std::string( win->GetTitle() ) + "_RCVfix").c_str() ) ;
+
44  for (auto cobj : win->components()) {
+
45  if (cobj->IsA() == RooConstVar::Class() )
+
46  {
+
47  RooConstVar* cvar = dynamic_cast<RooConstVar*> (cobj);
+
48  std::cout<<"[INFO] Found RooConstVar '"<<cvar->GetName()<<"' with value "<< cvar->getVal()<<" in workspace "<<name<<std::endl;
+
49  if (useRooRealVar)
+
50  {
+
51  RooRealVar rrv = RooRealVar(cvar->GetName(),cvar->GetTitle(),cvar->getVal());
+
52  rrv . removeRange(); // the line above may already do it
+
53  rrv . setConstant();
+
54  wout -> import ( rrv, RooFit::RecycleConflictNodes());
+
55  }
+
56  else{
+
57  RooConstVar rcv = RooConstVar(cvar->GetName(),cvar->GetTitle(),cvar->getVal());
+
58  wout -> import ( rcv, RooFit::RecycleConflictNodes());
+
59  }
+
60 
+
61  std::cout<<" -> imported in workspace"<<std::endl;
+
62  wout -> obj( cvar->GetName() ) -> Print("T");
+
63  }
+
64 
+
65  }
+
66 
+
67  // Import all other stuff
+
68  wout -> import(win->components(), RooFit::RecycleConflictNodes());
+
69  for (auto d : win->allData() ) wout -> import(*d);
+
70  if (clean) delete win; // if chained with clone and other stuff, this is the best option.
+
71  return wout;
+
72 }
+
73 
+
74 // Extract info from filename using parse rule like:
+
75 // ".*{MASS}/{ANALYSIS}_{CHANNEL}_{BINID}_{ERA}.txt"
+
76 int CombineHarvester::ParseDatacard(std::string const& filename,
+
77  std::string parse_rules) {
+
78  boost::replace_all(parse_rules, "$ANALYSIS", "(?<ANALYSIS>[\\w\\.]+)");
+
79  boost::replace_all(parse_rules, "$ERA", "(?<ERA>[\\w\\.]+)");
+
80  boost::replace_all(parse_rules, "$CHANNEL", "(?<CHANNEL>[\\w\\.]+)");
+
81  boost::replace_all(parse_rules, "$BINID", "(?<BINID>[\\w\\.]+)");
+
82  boost::replace_all(parse_rules, "$MASS", "(?<MASS>[\\w\\.]+)");
+
83  boost::regex rgx(parse_rules);
+
84  boost::smatch matches;
+
85  boost::regex_search(filename, matches, rgx);
+
86  this->ParseDatacard(filename,
+
87  matches.str("ANALYSIS"),
+
88  matches.str("ERA"),
+
89  matches.str("CHANNEL"),
+
90  matches.str("BINID").length() ?
+
91  boost::lexical_cast<int>(matches.str("BINID")) : 0,
+
92  matches.str("MASS"));
+
93  return 0;
+
94 }
95 
-
96  // Do a first pass just for shapes, as some cards
-
97  // declare observations / processes before the shapes lines
-
98  for (unsigned i = 0; i < words.size(); ++i) {
-
99  // Ignore line if it only has one word
-
100  if (words[i].size() <= 1) continue;
-
101 
-
102  // If the line begins "shapes" then we've
-
103  // found process --> TH1 mapping information
-
104  if (boost::iequals(words[i][0], "shapes") && words[i].size() >= 5) {
-
105  hist_mapping.push_back(HistMapping());
-
106  HistMapping &mapping = hist_mapping.back();
-
107  mapping.process = words[i][1];
-
108  mapping.category = words[i][2];
-
109  // The root file path given in the datacard is relative to the datacard
-
110  // path, so we join the path to the datacard with the path to the file
-
111  std::string dc_path;
-
112  std::size_t slash = filename.find_last_of('/');
-
113  if (slash != filename.npos) {
-
114  dc_path = filename.substr(0, slash) + "/" + words[i][3];
-
115  } else {
-
116  dc_path = words[i][3];
-
117  }
-
118  if (!file_store.count(dc_path))
-
119  file_store[dc_path] = std::make_shared<TFile>(dc_path.c_str());
-
120  mapping.file = file_store.at(dc_path);
-
121  mapping.pattern = words[i][4];
-
122  if (words[i].size() > 5) mapping.syst_pattern = words[i][5];
+
96 int CombineHarvester::ParseDatacard(std::string const& filename,
+
97  std::string const& analysis,
+
98  std::string const& era,
+
99  std::string const& channel,
+
100  int bin_id,
+
101  std::string const& mass) {
+
102  TH1::AddDirectory(kFALSE);
+
103  // Load the entire datacard into memory as a vector of strings
+
104  std::vector<std::string> lines = ch::ParseFileLines(filename);
+
105  // Loop through lines, trimming whitespace at the beginning or end
+
106  // then splitting each line into a vector of words (using any amount
+
107  // of whitespace as the separator). We skip any line of zero length
+
108  // or which starts with a "#" or "-" character.
+
109  std::vector<std::vector<std::string>> words;
+
110  for (unsigned i = 0; i < lines.size(); ++i) {
+
111  boost::trim(lines[i]);
+
112  if (lines[i].size() == 0) continue;
+
113  if (lines[i].at(0) == '#' || lines[i].at(0) == '-') continue;
+
114  words.push_back(std::vector<std::string>());
+
115  boost::split(words.back(), lines[i], boost::is_any_of("\t "),
+
116  boost::token_compress_on);
+
117  }
+
118 
+
119  std::vector<HistMapping> hist_mapping;
+
120  // std::map<std::string, RooAbsData*> data_map;
+
121  std::map<std::string, std::shared_ptr<TFile>> file_store;
+
122  std::map<std::string, std::shared_ptr<RooWorkspace>> ws_store;
123 
-
124  if (mapping.IsPdf()) {
-
125  std::string store_key =
-
126  mapping.file->GetName() + mapping.WorkspaceName();
-
127  if (!ws_store.count(store_key)) {
-
128  mapping.file->cd();
-
129  std::shared_ptr<RooWorkspace> ptr(dynamic_cast<RooWorkspace*>(
-
130  gDirectory->Get(mapping.WorkspaceName().c_str())));
-
131  if (!ptr) {
-
132  throw std::runtime_error(FNERROR("Workspace not found in file"));
-
133  }
-
134  ws_store[store_key] = ptr;
-
135  }
-
136  mapping.ws = SetupWorkspace(*(ws_store[store_key]), true);
-
137  }
-
138  if (mapping.IsPdf() && mapping.syst_pattern != "") {
-
139  std::string store_key =
-
140  mapping.file->GetName() + mapping.SystWorkspaceName();
-
141  if (!ws_store.count(store_key)) {
-
142  mapping.file->cd();
-
143  std::shared_ptr<RooWorkspace> ptr(dynamic_cast<RooWorkspace*>(
-
144  gDirectory->Get(mapping.SystWorkspaceName().c_str())));
-
145  if (!ptr) {
-
146  throw std::runtime_error(FNERROR("Workspace not found in file"));
-
147  }
-
148  ws_store[store_key] = ptr;
-
149  }
-
150  mapping.sys_ws = SetupWorkspace(*(ws_store[store_key]), true);
-
151  }
-
152  }
-
153 
-
154  // We can also have a "FAKE" shape directive
-
155  // Must be four words long: shapes * * FAKE
-
156  if (boost::iequals(words[i][0], "shapes") && words[i].size() == 4 &&
-
157  boost::iequals(words[i][3], "FAKE")) {
-
158  hist_mapping.push_back(HistMapping());
-
159  HistMapping &mapping = hist_mapping.back();
-
160  mapping.process = words[i][1];
-
161  mapping.category = words[i][2];
-
162  mapping.is_fake = true;
-
163  }
-
164  }
-
165 
-
166  for (unsigned i = 0; i < words.size(); ++i) {
-
167  if (words[i].size() >= 3 &&
-
168  boost::iequals(words[i][1], "extArg")) {
-
169  if (verbosity_ > 1) {
-
170  FNLOG(log()) << "Processing extArg line:\n";
-
171  for (auto const& str : words[i]) {
-
172  log() << str << "\t";
-
173  }
-
174  log() << "\n";
-
175  }
-
176 
-
177  bool has_range = words[i].size() == 4 && words[i][3][0] == '[';
-
178  std::string param_name = words[i][0];
-
179  bool is_wsp_rateparam = false;
-
180  try {
-
181  boost::lexical_cast<double>(words[i][2]);
-
182  } catch (boost::bad_lexical_cast &) {
-
183  is_wsp_rateparam = true;
-
184  }
-
185  if ((!is_wsp_rateparam) && (words[i].size() == 3 || has_range)) {
-
186  ch::Parameter* param = SetupRateParamVar(
-
187  param_name, boost::lexical_cast<double>(words[i][2]), true);
-
188  param->set_err_u(0.);
-
189  param->set_err_d(0.);
-
190  if (has_range) {
-
191  std::vector<std::string> tokens;
-
192  boost::split(tokens, words[i][3], boost::is_any_of("[],"));
-
193  if (tokens.size() == 4) {
-
194  param->set_range_d(boost::lexical_cast<double>(tokens[1]));
-
195  param->set_range_u(boost::lexical_cast<double>(tokens[2]));
-
196  FNLOGC(log(), verbosity_ > 1) << "Setting parameter range to " << words[i][2];
-
197  }
-
198  }
-
199  } else if (words[i].size() == 3 && is_wsp_rateparam) {
-
200  SetupRateParamWspObj(param_name, words[i][2], true);
-
201  }
-
202  }
-
203  }
-
204 
-
205  // Loop through the vector of word vectors
-
206  for (unsigned i = 0; i < words.size(); ++i) {
-
207  // Ignore line if it only has one word
-
208  if (words[i].size() <= 1) continue;
-
209 
-
210  // Want to check this line and the previous one, so need i >= 1.
-
211  // If the first word on this line is "observation" and "bin" on
-
212  // the previous line then we've found the entries for data, and
-
213  // can add Observation objects
-
214  if (i >= 1) {
-
215  if ( boost::iequals(words[i][0], "observation") &&
-
216  boost::iequals(words[i-1][0], "bin") &&
-
217  words[i].size() == words[i-1].size()) {
-
218  for (unsigned p = 1; p < words[i].size(); ++p) {
-
219  auto obs = std::make_shared<Observation>();
-
220  obs->set_bin(words[i-1][p]);
-
221  obs->set_rate(boost::lexical_cast<double>(words[i][p]));
-
222  obs->set_analysis(analysis);
-
223  obs->set_era(era);
-
224  obs->set_channel(channel);
-
225  obs->set_bin_id(bin_id);
-
226  obs->set_mass(mass);
-
227 
-
228  LoadShapes(obs.get(), hist_mapping);
-
229 
-
230  obs_.push_back(obs);
-
231  }
-
232  }
-
233  }
-
234 
-
235  if (boost::iequals(words[i][0], "observation") &&
-
236  !boost::iequals(words[i-1][0], "bin") &&
-
237  words[i].size() == 2 &&
-
238  single_obs.get() == nullptr) {
-
239  for (unsigned p = 1; p < words[i].size(); ++p) {
-
240  single_obs = std::make_shared<Observation>();
-
241  single_obs->set_bin("");
-
242  single_obs->set_rate(boost::lexical_cast<double>(words[i][p]));
-
243  single_obs->set_analysis(analysis);
-
244  single_obs->set_era(era);
-
245  single_obs->set_channel(channel);
-
246  single_obs->set_bin_id(bin_id);
-
247  single_obs->set_mass(mass);
-
248  }
-
249  }
-
250 
-
251  // Similarly look for the lines indicating the different signal
-
252  // and background processes
-
253  // Once these are found save in line index for the rate line as r
-
254  // to we can refer back to these later, then assume that every
-
255  // line that follows is a nuisance parameter
-
256 
-
257  if (i >= 3) {
-
258  if ( boost::iequals(words[i][0], "rate") &&
-
259  boost::iequals(words[i-1][0], "process") &&
-
260  boost::iequals(words[i-2][0], "process") &&
-
261  boost::iequals(words[i-3][0], "bin") &&
-
262  words[i].size() == words[i-1].size() &&
-
263  words[i].size() == words[i-2].size() &&
-
264  words[i].size() == words[i-3].size()) {
-
265  for (unsigned p = 1; p < words[i].size(); ++p) {
-
266  auto proc = std::make_shared<Process>();
-
267  proc->set_bin(words[i-3][p]);
-
268  bin_names.insert(words[i-3][p]);
-
269  try {
-
270  int process_id = boost::lexical_cast<int>(words[i-2][p]);
-
271  proc->set_signal(process_id <= 0);
-
272  proc->set_process(words[i-1][p]);
-
273  } catch(boost::bad_lexical_cast &) {
-
274  int process_id = boost::lexical_cast<int>(words[i-1][p]);
-
275  proc->set_signal(process_id <= 0);
-
276  proc->set_process(words[i-2][p]);
-
277  }
-
278  proc->set_rate(boost::lexical_cast<double>(words[i][p]));
-
279  proc->set_analysis(analysis);
-
280  proc->set_era(era);
-
281  proc->set_channel(channel);
-
282  proc->set_bin_id(bin_id);
-
283  proc->set_mass(mass);
-
284 
-
285  LoadShapes(proc.get(), hist_mapping);
-
286 
-
287  procs_.push_back(proc);
-
288  }
-
289  r = i;
-
290  start_nuisance_scan = true;
-
291  }
-
292  }
-
293 
-
294  if (start_nuisance_scan && words[i].size() >= 4) {
-
295  if (boost::iequals(words[i][1], "param")) {
-
296  std::string param_name = words[i][0];
-
297  if (!params_.count(param_name))
-
298  params_[param_name] = std::make_shared<Parameter>(Parameter());
-
299  Parameter * param = params_.at(param_name).get();
-
300  param->set_name(param_name);
-
301  param->set_val(boost::lexical_cast<double>(words[i][2]));
-
302  std::size_t slash_pos = words[i][3].find("/");
-
303  if (slash_pos != words[i][3].npos) {
-
304  param->set_err_d(
-
305  boost::lexical_cast<double>(words[i][3].substr(0, slash_pos)));
-
306  param->set_err_u(
-
307  boost::lexical_cast<double>(words[i][3].substr(slash_pos+1)));
-
308  } else {
-
309  param->set_err_u(+1.0 * boost::lexical_cast<double>(words[i][3]));
-
310  param->set_err_d(-1.0 * boost::lexical_cast<double>(words[i][3]));
-
311  }
-
312  if (words[i].size() >= 5) {
-
313  // We have a range
-
314  std::vector<std::string> tokens;
-
315  boost::split(tokens, words[i][4], boost::is_any_of("[],"));
-
316  if (tokens.size() == 4) {
-
317  param->set_range_d(boost::lexical_cast<double>(tokens[1]));
-
318  param->set_range_u(boost::lexical_cast<double>(tokens[2]));
-
319  }
-
320  }
-
321  continue; // skip the rest of this now
-
322  }
-
323  }
-
324 
-
325  if (start_nuisance_scan && words[i].size() >= 5 &&
-
326  boost::iequals(words[i][1], "rateParam")) {
-
327  if (verbosity_ > 1) {
-
328  FNLOG(log()) << "Processing rateParam line:\n";
-
329  for (auto const& str : words[i]) {
-
330  log() << str << "\t";
-
331  }
-
332  log() << "\n";
-
333  }
+
124  bool start_nuisance_scan = false;
+
125  unsigned r = 0;
+
126 
+
127  // We will allow cards that describe a single bin to have an "observation"
+
128  // line without a "bin" line above it. We probably won't know the bin name
+
129  // when we parse this line, so we'll store it here and fix it later
+
130  std::shared_ptr<ch::Observation> single_obs = nullptr;
+
131  std::set<std::string> bin_names;
+
132 
+
133  // Store the groups that we encounter
+
134  std::map<std::string, std::set<std::string>> groups;
+
135 
+
136  // Do a first pass just for shapes, as some cards
+
137  // declare observations / processes before the shapes lines
+
138  for (unsigned i = 0; i < words.size(); ++i) {
+
139  // Ignore line if it only has one word
+
140  if (words[i].size() <= 1) continue;
+
141 
+
142  // If the line begins "shapes" then we've
+
143  // found process --> TH1 mapping information
+
144  if (boost::iequals(words[i][0], "shapes") && words[i].size() >= 5) {
+
145  hist_mapping.push_back(HistMapping());
+
146  HistMapping &mapping = hist_mapping.back();
+
147  mapping.process = words[i][1];
+
148  mapping.category = words[i][2];
+
149  // The root file path given in the datacard is relative to the datacard
+
150  // path, so we join the path to the datacard with the path to the file
+
151  std::string dc_path;
+
152  std::size_t slash = filename.find_last_of('/');
+
153  if (slash != filename.npos) {
+
154  dc_path = filename.substr(0, slash) + "/" + words[i][3];
+
155  } else {
+
156  dc_path = words[i][3];
+
157  }
+
158  if (!file_store.count(dc_path))
+
159  file_store[dc_path] = std::make_shared<TFile>(dc_path.c_str());
+
160  mapping.file = file_store.at(dc_path);
+
161  mapping.pattern = words[i][4];
+
162  if (words[i].size() > 5) mapping.syst_pattern = words[i][5];
+
163 
+
164  if (mapping.IsPdf()) {
+
165  std::string store_key =
+
166  mapping.file->GetName() + mapping.WorkspaceName();
+
167  if (!ws_store.count(store_key)) {
+
168  mapping.file->cd();
+
169  std::shared_ptr<RooWorkspace> ptr(
+
170  fixRooConstVar(
+
171  dynamic_cast<RooWorkspace*>(gDirectory->Get(mapping.WorkspaceName().c_str()))
+
172  )
+
173  );
+
174  if (!ptr) {
+
175  throw std::runtime_error(FNERROR("Workspace not found in file"));
+
176  }
+
177  ws_store[store_key] = ptr;
+
178  }
+
179  mapping.ws = SetupWorkspace(*(ws_store[store_key]), true);
+
180  }
+
181  if (mapping.IsPdf() && mapping.syst_pattern != "") {
+
182  std::string store_key =
+
183  mapping.file->GetName() + mapping.SystWorkspaceName();
+
184  if (!ws_store.count(store_key)) {
+
185  mapping.file->cd();
+
186  std::shared_ptr<RooWorkspace> ptr(
+
187  fixRooConstVar(
+
188  dynamic_cast<RooWorkspace*>(gDirectory->Get(mapping.SystWorkspaceName().c_str()))
+
189  )
+
190  );
+
191  if (!ptr) {
+
192  throw std::runtime_error(FNERROR("Workspace not found in file"));
+
193  }
+
194  ws_store[store_key] = ptr;
+
195  }
+
196  mapping.sys_ws = SetupWorkspace(*(ws_store[store_key]), true);
+
197  }
+
198  }
+
199 
+
200  // We can also have a "FAKE" shape directive
+
201  // Must be four words long: shapes * * FAKE
+
202  if (boost::iequals(words[i][0], "shapes") && words[i].size() == 4 &&
+
203  boost::iequals(words[i][3], "FAKE")) {
+
204  hist_mapping.push_back(HistMapping());
+
205  HistMapping &mapping = hist_mapping.back();
+
206  mapping.process = words[i][1];
+
207  mapping.category = words[i][2];
+
208  mapping.is_fake = true;
+
209  }
+
210  }
+
211 
+
212  for (unsigned i = 0; i < words.size(); ++i) {
+
213  if (words[i].size() >= 3 &&
+
214  boost::iequals(words[i][1], "extArg")) {
+
215  if (verbosity_ > 1) {
+
216  FNLOG(log()) << "Processing extArg line:\n";
+
217  for (auto const& str : words[i]) {
+
218  log() << str << "\t";
+
219  }
+
220  log() << "\n";
+
221  }
+
222 
+
223  bool has_range = words[i].size() == 4 && words[i][3][0] == '[';
+
224  std::string param_name = words[i][0];
+
225  bool is_wsp_rateparam = false;
+
226  try {
+
227  boost::lexical_cast<double>(words[i][2]);
+
228  } catch (boost::bad_lexical_cast &) {
+
229  is_wsp_rateparam = true;
+
230  }
+
231  if ((!is_wsp_rateparam) && (words[i].size() == 3 || has_range)) {
+
232  ch::Parameter* param = SetupRateParamVar(
+
233  param_name, boost::lexical_cast<double>(words[i][2]), true);
+
234  param->set_err_u(0.);
+
235  param->set_err_d(0.);
+
236  if (has_range) {
+
237  std::vector<std::string> tokens;
+
238  boost::split(tokens, words[i][3], boost::is_any_of("[],"));
+
239  if (tokens.size() == 4) {
+
240  param->set_range_d(boost::lexical_cast<double>(tokens[1]));
+
241  param->set_range_u(boost::lexical_cast<double>(tokens[2]));
+
242  FNLOGC(log(), verbosity_ > 1) << "Setting parameter range to " << words[i][2];
+
243  }
+
244  }
+
245  } else if (words[i].size() == 3 && is_wsp_rateparam) {
+
246  if (!SetupRateParamWspObjFromWsStore(param_name, words[i][2], ws_store)) {
+
247  SetupRateParamWspObj(param_name, words[i][2], true);
+
248  }
+
249  }
+
250  }
+
251  }
+
252 
+
253  // Loop through the vector of word vectors
+
254  for (unsigned i = 0; i < words.size(); ++i) {
+
255  // Ignore line if it only has one word
+
256  if (words[i].size() <= 1) continue;
+
257 
+
258  // Want to check this line and the previous one, so need i >= 1.
+
259  // If the first word on this line is "observation" and "bin" on
+
260  // the previous line then we've found the entries for data, and
+
261  // can add Observation objects
+
262  if (i >= 1) {
+
263  if ( boost::iequals(words[i][0], "observation") &&
+
264  boost::iequals(words[i-1][0], "bin") &&
+
265  words[i].size() == words[i-1].size()) {
+
266  for (unsigned p = 1; p < words[i].size(); ++p) {
+
267  auto obs = std::make_shared<Observation>();
+
268  obs->set_bin(words[i-1][p]);
+
269  obs->set_rate(boost::lexical_cast<double>(words[i][p]));
+
270  obs->set_analysis(analysis);
+
271  obs->set_era(era);
+
272  obs->set_channel(channel);
+
273  obs->set_bin_id(bin_id);
+
274  obs->set_mass(mass);
+
275 
+
276  LoadShapes(obs.get(), hist_mapping);
+
277 
+
278  obs_.push_back(obs);
+
279  }
+
280  }
+
281  }
+
282 
+
283  if (boost::iequals(words[i][0], "observation") &&
+
284  !boost::iequals(words[i-1][0], "bin") &&
+
285  words[i].size() == 2 &&
+
286  single_obs.get() == nullptr) {
+
287  for (unsigned p = 1; p < words[i].size(); ++p) {
+
288  single_obs = std::make_shared<Observation>();
+
289  single_obs->set_bin("");
+
290  single_obs->set_rate(boost::lexical_cast<double>(words[i][p]));
+
291  single_obs->set_analysis(analysis);
+
292  single_obs->set_era(era);
+
293  single_obs->set_channel(channel);
+
294  single_obs->set_bin_id(bin_id);
+
295  single_obs->set_mass(mass);
+
296  }
+
297  }
+
298 
+
299  // Similarly look for the lines indicating the different signal
+
300  // and background processes
+
301  // Once these are found save in line index for the rate line as r
+
302  // to we can refer back to these later, then assume that every
+
303  // line that follows is a nuisance parameter
+
304 
+
305  if (i >= 3) {
+
306  if ( boost::iequals(words[i][0], "rate") &&
+
307  boost::iequals(words[i-1][0], "process") &&
+
308  boost::iequals(words[i-2][0], "process") &&
+
309  boost::iequals(words[i-3][0], "bin") &&
+
310  words[i].size() == words[i-1].size() &&
+
311  words[i].size() == words[i-2].size() &&
+
312  words[i].size() == words[i-3].size()) {
+
313  for (unsigned p = 1; p < words[i].size(); ++p) {
+
314  auto proc = std::make_shared<Process>();
+
315  proc->set_bin(words[i-3][p]);
+
316  bin_names.insert(words[i-3][p]);
+
317  try {
+
318  int process_id = boost::lexical_cast<int>(words[i-2][p]);
+
319  proc->set_signal(process_id <= 0);
+
320  proc->set_process(words[i-1][p]);
+
321  } catch(boost::bad_lexical_cast &) {
+
322  int process_id = boost::lexical_cast<int>(words[i-1][p]);
+
323  proc->set_signal(process_id <= 0);
+
324  proc->set_process(words[i-2][p]);
+
325  }
+
326  proc->set_rate(boost::lexical_cast<double>(words[i][p]));
+
327  proc->set_analysis(analysis);
+
328  proc->set_era(era);
+
329  proc->set_channel(channel);
+
330  proc->set_bin_id(bin_id);
+
331  proc->set_mass(mass);
+
332 
+
333  LoadShapes(proc.get(), hist_mapping);
334 
-
335  bool has_range = words[i].size() == 6 && words[i][5][0] == '[';
-
336  std::string param_name = words[i][0];
-
337  // If this is a free param may need to create a Parameter object
-
338  // If the line has 5 words then it can either be a floating param
-
339  // or one from a workspace. Otherwise if it has 6 then it's either
-
340  // a floating param with a range or a formula
-
341  bool is_wsp_rateparam = false;
-
342  try {
-
343  boost::lexical_cast<double>(words[i][4]);
-
344  } catch (boost::bad_lexical_cast &) {
-
345  is_wsp_rateparam = true;
-
346  }
-
347  if ((!is_wsp_rateparam) && (words[i].size() == 5 || has_range)) {
-
348  ch::Parameter* param = SetupRateParamVar(
-
349  param_name, boost::lexical_cast<double>(words[i][4]));
-
350  param->set_err_u(0.);
-
351  param->set_err_d(0.);
-
352  if (has_range) {
-
353  std::vector<std::string> tokens;
-
354  boost::split(tokens, words[i][5], boost::is_any_of("[],"));
-
355  if (tokens.size() == 4) {
-
356  param->set_range_d(boost::lexical_cast<double>(tokens[1]));
-
357  param->set_range_u(boost::lexical_cast<double>(tokens[2]));
-
358  FNLOGC(log(), verbosity_ > 1) << "Setting parameter range to " << words[i][5];
-
359  }
-
360  }
-
361  } else if (words[i].size() == 6 && !has_range) {
-
362  SetupRateParamFunc(param_name, words[i][4], words[i][5]);
-
363  } else if (words[i].size() == 5 && is_wsp_rateparam) {
-
364  SetupRateParamWspObj(param_name, words[i][4]);
-
365  }
-
366  for (unsigned p = 1; p < words[r].size(); ++p) {
-
367  bool matches_bin = false;
-
368  bool matches_proc = false;
-
369  int process_id;
-
370  std::string process;
-
371  std::string bin = words[r-3][p];
-
372  // Not great that we repeat this below
-
373  try {
-
374  process_id = boost::lexical_cast<int>(words[r-2][p]);
-
375  process = words[r-1][p];
-
376  } catch(boost::bad_lexical_cast &) {
-
377  process_id = boost::lexical_cast<int>(words[r-1][p]);
-
378  process = words[r-2][p];
-
379  }
-
380  // if (words[i][2] == "*" || words[i][2] == bin) {
-
381  if (words[i][2] == "*" || fnmatch(words[i][2].c_str(), bin.c_str(), 0) == 0) {
-
382  matches_bin = true;
-
383  }
-
384  // if (words[i][3] == "*" || words[i][3] == process) {
-
385  if (words[i][3] == "*" || fnmatch(words[i][3].c_str(), process.c_str(), 0) == 0) {
-
386  matches_proc = true;
-
387  }
-
388  if (!matches_bin || !matches_proc) continue;
-
389  auto sys = std::make_shared<Systematic>();
-
390  sys->set_bin(bin);
-
391  sys->set_signal(process_id <= 0);
-
392  sys->set_process(process);
-
393  sys->set_name(param_name);
-
394  sys->set_type("rateParam");
-
395  sys->set_analysis(analysis);
-
396  sys->set_era(era);
-
397  sys->set_channel(channel);
-
398  sys->set_bin_id(bin_id);
-
399  sys->set_mass(mass);
-
400  systs_.push_back(sys);
-
401  }
-
402  continue;
-
403  }
-
404 
-
405  if (start_nuisance_scan && words[i].size() >= 4 &&
-
406  boost::iequals(words[i][1], "group")) {
-
407  if (!groups.count(words[i][0])) {
-
408  groups[words[i][0]] = std::set<std::string>();
-
409  }
-
410  for (unsigned ig = 3; ig < words[i].size(); ++ig) {
-
411  groups[words[i][0]].insert(words[i][ig]);
-
412  }
-
413  continue;
-
414  }
-
415 
-
416  if (start_nuisance_scan && words[i].size() >= 3 &&
-
417  boost::iequals(words[i][1], "autoMCStats")) {
-
418  std::vector<std::string> for_bins;
-
419  if (words[i][0] == "*") {
-
420  for_bins = Set2Vec(bin_names);
-
421  } else {
-
422  for_bins.push_back(words[i][0]);
-
423  }
-
424  for (auto const& bin : for_bins) {
-
425  double thresh = boost::lexical_cast<double>(words[i][2]);
-
426  if (words[i].size() == 3) {
-
427  auto_stats_settings_[bin] = AutoMCStatsSettings(thresh);
-
428  } else if (words[i].size() == 4) {
-
429  auto_stats_settings_[bin] = AutoMCStatsSettings(thresh, boost::lexical_cast<int>(words[i][3]));
-
430  } else {
-
431  auto_stats_settings_[bin] = AutoMCStatsSettings(thresh, boost::lexical_cast<int>(words[i][3]), boost::lexical_cast<int>(words[i][4]));
-
432  }
-
433  }
-
434  }
-
435 
-
436  if (start_nuisance_scan && words[i].size()-1 == words[r].size() && !boost::iequals(words[i][1], "autoMCStats")) {
-
437  for (unsigned p = 2; p < words[i].size(); ++p) {
-
438  if (words[i][p] == "-") continue;
-
439  auto sys = std::make_shared<Systematic>();
-
440  sys->set_bin(words[r-3][p-1]);
-
441  try {
-
442  int process_id = boost::lexical_cast<int>(words[r-2][p-1]);
-
443  sys->set_signal(process_id <= 0);
-
444  sys->set_process(words[r-1][p-1]);
-
445  } catch(boost::bad_lexical_cast &) {
-
446  int process_id = boost::lexical_cast<int>(words[r-1][p-1]);
-
447  sys->set_signal(process_id <= 0);
-
448  sys->set_process(words[r-2][p-1]);
-
449  }
-
450  sys->set_name(words[i][0]);
-
451  std::string type = words[i][1];
-
452  if (!contains(std::vector<std::string>{"shape", "shape?", "shapeN2", "shapeU", "lnN", "lnU"},
-
453  type)) {
-
454  throw std::runtime_error(
-
455  FNERROR("Systematic type " + type + " not supported"));
-
456  }
-
457  sys->set_type(words[i][1]);
-
458  sys->set_analysis(analysis);
-
459  sys->set_era(era);
-
460  sys->set_channel(channel);
-
461  sys->set_bin_id(bin_id);
-
462  sys->set_mass(mass);
-
463  sys->set_scale(1.0);
-
464  std::size_t slash_pos = words[i][p].find("/");
-
465  if (slash_pos != words[i][p].npos) {
-
466  // Assume asymmetric of form kDown/kUp
-
467  sys->set_value_d(
-
468  boost::lexical_cast<double>(words[i][p].substr(0, slash_pos)));
-
469  sys->set_value_u(
-
470  boost::lexical_cast<double>(words[i][p].substr(slash_pos+1)));
-
471  sys->set_asymm(true);
-
472  } else {
-
473  sys->set_value_u(boost::lexical_cast<double>(words[i][p]));
-
474  sys->set_asymm(false);
-
475  }
-
476  if (sys->type() == "shape" || sys->type() == "shapeN2" ||
-
477  sys->type() == "shapeU") {
-
478  sys->set_scale(boost::lexical_cast<double>(words[i][p]));
-
479  LoadShapes(sys.get(), hist_mapping);
-
480  } else if (sys->type() == "shape?") {
-
481  // This might fail, so we have to "try"
-
482  try {
-
483  LoadShapes(sys.get(), hist_mapping);
-
484  } catch (std::exception & e) {
-
485  if (verbosity_ > 0) {
-
486  LOGLINE(log(), "Systematic with shape? did not resolve to a shape");
-
487  log() << e.what();
-
488  }
-
489  }
-
490  if (!sys->shape_u() || !sys->shape_d()) {
-
491  sys->set_type("lnN");
-
492  } else {
-
493  sys->set_type("shape");
-
494  sys->set_scale(boost::lexical_cast<double>(words[i][p]));
-
495  }
-
496  }
-
497  if (sys->type() == "shape" || sys->type() == "shapeN2" ||
-
498  sys->type() == "shapeU")
-
499  sys->set_asymm(true);
-
500 
- -
502  if (sys->type() == "lnU" || sys->type() == "shapeU") {
-
503  params_.at(sys->name())->set_err_d(0.);
-
504  params_.at(sys->name())->set_err_u(0.);
-
505  }
-
506  systs_.push_back(sys);
-
507  }
-
508  }
-
509  }
-
510  if (single_obs) {
-
511  if (bin_names.size() == 1) {
-
512  single_obs->set_bin(*(bin_names.begin()));
-
513  LoadShapes(single_obs.get(), hist_mapping);
-
514  obs_.push_back(single_obs);
-
515  } else {
-
516  throw std::runtime_error(FNERROR(
-
517  "Input card specifies a single observation entry without a bin, but "
-
518  "multiple bins defined elsewhere"));
-
519  }
-
520  }
-
521 
-
522  // Finally populate the groups
-
523  for (auto const& grp : groups) {
-
524  this->SetGroup(grp.first, ch::Set2Vec(grp.second));
-
525  }
-
526  return 0;
-
527 }
-
528 
-
529 void CombineHarvester::WriteDatacard(std::string const& name,
-
530  std::string const& root_file) {
-
531  TFile file(root_file.c_str(), "RECREATE");
- -
533  file.Close();
-
534 }
-
535 
-
536 void CombineHarvester::WriteDatacard(std::string const& name) {
-
537  TFile dummy;
-
538  CombineHarvester::WriteDatacard(name, dummy);
-
539  dummy.Close();
-
540 }
-
541 
-
542 void CombineHarvester::FillHistMappings(std::vector<HistMapping> & mappings) {
-
543  // Build maps of
-
544  // RooAbsData --> RooWorkspace
-
545  // RooAbsPdf --> RooWorkspace
-
546  std::map<RooAbsData const*, RooWorkspace*> data_ws_map;
-
547  std::map<RooAbsReal const*, RooWorkspace*> pdf_ws_map;
-
548  for (auto const& iter : wspaces_) {
-
549  auto dat = iter.second->allData();
-
550  for (auto d : dat) {
-
551  data_ws_map[d] = iter.second.get();
-
552  }
-
553  RooArgSet vars = iter.second->allPdfs();
-
554  auto v = vars.createIterator();
-
555  do {
-
556  RooAbsReal *y = dynamic_cast<RooAbsReal*>(**v);
-
557  if (y) pdf_ws_map[iter.second->pdf(y->GetName())] = iter.second.get();
-
558  } while (v->Next());
-
559  RooArgSet fvars = iter.second->allFunctions();
-
560  auto fv = fvars.createIterator();
-
561  do {
-
562  RooAbsReal *y = dynamic_cast<RooAbsReal*>(**fv);
-
563  if (y) pdf_ws_map[iter.second->function(y->GetName())] = iter.second.get();
-
564  } while (fv->Next());
-
565  }
-
566 
-
567  // For writing TH1s we will hard code a set of patterns for each bin
-
568  // This assumes that the backgrounds will not depend on "mass" but the
-
569  // signal will. Will probably want to change this in the future
-
570  std::set<std::string> hist_bins;
-
571  auto bins = this->bin_set();
-
572  for (auto bin : bins) {
-
573  unsigned shape_count = std::count_if(procs_.begin(), procs_.end(),
-
574  [&](std::shared_ptr<ch::Process> p) {
-
575  return (p->bin() == bin && p->shape() && (!p->signal()));
-
576  });
-
577  shape_count += std::count_if(obs_.begin(), obs_.end(),
-
578  [&](std::shared_ptr<ch::Observation> p) {
-
579  return (p->bin() == bin && p->shape());
-
580  });
-
581  unsigned counting = std::count_if(
-
582  procs_.begin(), procs_.end(), [&](std::shared_ptr<ch::Process> p) {
-
583  return (p->bin() == bin && p->shape() == nullptr &&
-
584  p->pdf() == nullptr && p->data() == nullptr);
-
585  });
-
586  counting += std::count_if(
-
587  obs_.begin(), obs_.end(), [&](std::shared_ptr<ch::Observation> p) {
-
588  return (p->bin() == bin && p->shape() == nullptr &&
-
589  p->data() == nullptr);
-
590  });
-
591 
-
592  if (shape_count > 0) {
-
593  mappings.emplace_back("*", bin, bin + "/$PROCESS",
-
594  bin + "/$PROCESS_$SYSTEMATIC");
-
595  hist_bins.insert(bin);
-
596  } else if (counting > 0) {
-
597  mappings.emplace_back("*", bin, "", "");
-
598  mappings.back().is_fake = true;
-
599  }
-
600 
-
601  CombineHarvester ch_signals =
-
602  std::move(this->cp().bin({bin}).signals().histograms());
-
603  auto sig_proc_set =
-
604  ch_signals.SetFromProcs(std::mem_fn(&ch::Process::process));
-
605  for (auto sig_proc : sig_proc_set) {
-
606  // should only add this mapping if the signal process has a numeric mass
-
607  // value, otherwise we will write it using the background rule above
-
608  auto masses = Set2Vec(ch_signals.cp()
-
609  .process({sig_proc})
-
610  .SetFromProcs(std::mem_fn(&ch::Process::mass)));
-
611  if (masses.size() != 1) {
-
612  throw std::runtime_error(FNERROR("Process " + sig_proc + " in bin " +
-
613  bin +
-
614  " has multiple entries with multiple "
-
615  "mass values, this is not supported"));
+
335  procs_.push_back(proc);
+
336  }
+
337  r = i;
+
338  start_nuisance_scan = true;
+
339  }
+
340  }
+
341  if (start_nuisance_scan && words[i].size() >= 4) {
+
342  if (boost::iequals(words[i][1], "param")) {
+
343  std::string param_name = words[i][0];
+
344  Parameter * param = SetupRateParamVar(param_name, boost::lexical_cast<double>(words[i][2]));
+
345  param->set_val(boost::lexical_cast<double>(words[i][2]));
+
346  std::size_t slash_pos = words[i][3].find("/");
+
347  if (slash_pos != words[i][3].npos) {
+
348  param->set_err_d(
+
349  boost::lexical_cast<double>(words[i][3].substr(0, slash_pos)));
+
350  param->set_err_u(
+
351  boost::lexical_cast<double>(words[i][3].substr(slash_pos+1)));
+
352  } else {
+
353  param->set_err_u(+1.0 * boost::lexical_cast<double>(words[i][3]));
+
354  param->set_err_d(-1.0 * boost::lexical_cast<double>(words[i][3]));
+
355  }
+
356  if (words[i].size() >= 5) {
+
357  // We have a range
+
358  std::vector<std::string> tokens;
+
359  boost::split(tokens, words[i][4], boost::is_any_of("[],"));
+
360  if (tokens.size() == 4) {
+
361  param->set_range_d(boost::lexical_cast<double>(tokens[1]));
+
362  param->set_range_u(boost::lexical_cast<double>(tokens[2]));
+
363  }
+
364  }
+
365  auto sys = std::make_shared<Systematic>();
+
366  sys->set_name(param_name);
+
367  sys->set_type("param");
+
368  sys->set_analysis(analysis);
+
369  sys->set_era(era);
+
370  sys->set_channel(channel);
+
371  sys->set_bin_id(bin_id);
+
372  sys->set_mass(mass);
+
373  // Add string extension for edge case where param and rateParam have the same name
+
374  std::string syst_str_ext = (boost::format("%g %g") % param->val() % ((param->err_u() - param->err_d()) / 2.0)).str();
+
375  if (param->range_d() != std::numeric_limits<double>::lowest() &&
+
376  param->range_u() != std::numeric_limits<double>::max()) {
+
377  syst_str_ext += (boost::format(" [%.4g,%.4g]") % param->range_d() % param->range_u()).str();
+
378  }
+
379  sys->set_param_str_ext(syst_str_ext);
+
380  systs_.push_back(sys);
+
381  continue; // skip the rest of this now
+
382  }
+
383  }
+
384 
+
385  if (start_nuisance_scan && words[i].size() >= 5 &&
+
386  boost::iequals(words[i][1], "rateParam")) {
+
387  if (verbosity_ > 1) {
+
388  FNLOG(log()) << "Processing rateParam line:\n";
+
389  for (auto const& str : words[i]) {
+
390  log() << str << "\t";
+
391  }
+
392  log() << "\n";
+
393  }
+
394 
+
395  bool has_range = words[i].size() == 6 && words[i][5][0] == '[';
+
396  std::string param_name = words[i][0];
+
397  // If this is a free param may need to create a Parameter object
+
398  // If the line has 5 words then it can either be a floating param
+
399  // or one from a workspace. Otherwise if it has 6 then it's either
+
400  // a floating param with a range or a formula
+
401  bool is_wsp_rateparam = false;
+
402  try {
+
403  boost::lexical_cast<double>(words[i][4]);
+
404  } catch (boost::bad_lexical_cast &) {
+
405  is_wsp_rateparam = true;
+
406  }
+
407  if ((!is_wsp_rateparam) && (words[i].size() == 5 || has_range)) {
+
408  ch::Parameter* param = SetupRateParamVar(
+
409  param_name, boost::lexical_cast<double>(words[i][4]));
+
410  param->set_err_u(0.);
+
411  param->set_err_d(0.);
+
412  if (has_range) {
+
413  std::vector<std::string> tokens;
+
414  boost::split(tokens, words[i][5], boost::is_any_of("[],"));
+
415  if (tokens.size() == 4) {
+
416  param->set_range_d(boost::lexical_cast<double>(tokens[1]));
+
417  param->set_range_u(boost::lexical_cast<double>(tokens[2]));
+
418  FNLOGC(log(), verbosity_ > 1) << "Setting parameter range to " << words[i][5];
+
419  }
+
420  }
+
421  } else if (words[i].size() == 6 && !has_range) {
+
422  SetupRateParamFunc(param_name, words[i][4], words[i][5]);
+
423  } else if (words[i].size() == 5 && is_wsp_rateparam) {
+
424  SetupRateParamWspObj(param_name, words[i][4]);
+
425  }
+
426  for (unsigned p = 1; p < words[r].size(); ++p) {
+
427  bool matches_bin = false;
+
428  bool matches_proc = false;
+
429  int process_id;
+
430  std::string process;
+
431  std::string bin = words[r-3][p];
+
432  // Not great that we repeat this below
+
433  try {
+
434  process_id = boost::lexical_cast<int>(words[r-2][p]);
+
435  process = words[r-1][p];
+
436  } catch(boost::bad_lexical_cast &) {
+
437  process_id = boost::lexical_cast<int>(words[r-1][p]);
+
438  process = words[r-2][p];
+
439  }
+
440  // if (words[i][2] == "*" || words[i][2] == bin) {
+
441  if (words[i][2] == "*" || fnmatch(words[i][2].c_str(), bin.c_str(), 0) == 0) {
+
442  matches_bin = true;
+
443  }
+
444  // if (words[i][3] == "*" || words[i][3] == process) {
+
445  if (words[i][3] == "*" || fnmatch(words[i][3].c_str(), process.c_str(), 0) == 0) {
+
446  matches_proc = true;
+
447  }
+
448  if (!matches_bin || !matches_proc) continue;
+
449  auto sys = std::make_shared<Systematic>();
+
450  sys->set_bin(bin);
+
451  sys->set_signal(process_id <= 0);
+
452  sys->set_process(process);
+
453  sys->set_name(param_name);
+
454  sys->set_type("rateParam");
+
455  sys->set_analysis(analysis);
+
456  sys->set_era(era);
+
457  sys->set_channel(channel);
+
458  sys->set_bin_id(bin_id);
+
459  sys->set_mass(mass);
+
460  systs_.push_back(sys);
+
461  }
+
462  continue;
+
463  }
+
464 
+
465  if (start_nuisance_scan && words[i].size() >= 4 &&
+
466  boost::iequals(words[i][1], "group")) {
+
467  if (!groups.count(words[i][0])) {
+
468  groups[words[i][0]] = std::set<std::string>();
+
469  }
+
470  for (unsigned ig = 3; ig < words[i].size(); ++ig) {
+
471  groups[words[i][0]].insert(words[i][ig]);
+
472  }
+
473  continue;
+
474  }
+
475 
+
476  if (start_nuisance_scan && words[i].size() >= 3 &&
+
477  boost::iequals(words[i][1], "autoMCStats")) {
+
478  std::vector<std::string> for_bins;
+
479  if (words[i][0] == "*") {
+
480  for_bins = Set2Vec(bin_names);
+
481  } else {
+
482  for_bins.push_back(words[i][0]);
+
483  }
+
484  for (auto const& bin : for_bins) {
+
485  double thresh = boost::lexical_cast<double>(words[i][2]);
+
486  if (words[i].size() == 3) {
+
487  auto_stats_settings_[bin] = AutoMCStatsSettings(thresh);
+
488  } else if (words[i].size() == 4) {
+
489  auto_stats_settings_[bin] = AutoMCStatsSettings(thresh, boost::lexical_cast<int>(words[i][3]));
+
490  } else {
+
491  auto_stats_settings_[bin] = AutoMCStatsSettings(thresh, boost::lexical_cast<int>(words[i][3]), boost::lexical_cast<int>(words[i][4]));
+
492  }
+
493  }
+
494  }
+
495 
+
496  if (start_nuisance_scan && words[i].size()-1 == words[r].size() && !boost::iequals(words[i][1], "autoMCStats")) {
+
497  for (unsigned p = 2; p < words[i].size(); ++p) {
+
498  if (words[i][p] == "-") continue;
+
499  auto sys = std::make_shared<Systematic>();
+
500  sys->set_bin(words[r-3][p-1]);
+
501  try {
+
502  int process_id = boost::lexical_cast<int>(words[r-2][p-1]);
+
503  sys->set_signal(process_id <= 0);
+
504  sys->set_process(words[r-1][p-1]);
+
505  } catch(boost::bad_lexical_cast &) {
+
506  int process_id = boost::lexical_cast<int>(words[r-1][p-1]);
+
507  sys->set_signal(process_id <= 0);
+
508  sys->set_process(words[r-2][p-1]);
+
509  }
+
510  sys->set_name(words[i][0]);
+
511  std::string type = words[i][1];
+
512  if (!contains(std::vector<std::string>{"shape", "shape?", "shapeN2", "shapeU", "lnN", "lnU"},
+
513  type)) {
+
514  throw std::runtime_error(
+
515  FNERROR("Systematic type " + type + " not supported"));
+
516  }
+
517  sys->set_type(words[i][1]);
+
518  sys->set_analysis(analysis);
+
519  sys->set_era(era);
+
520  sys->set_channel(channel);
+
521  sys->set_bin_id(bin_id);
+
522  sys->set_mass(mass);
+
523  sys->set_scale(1.0);
+
524  std::size_t slash_pos = words[i][p].find("/");
+
525  if (slash_pos != words[i][p].npos) {
+
526  // Assume asymmetric of form kDown/kUp
+
527  sys->set_value_d(
+
528  boost::lexical_cast<double>(words[i][p].substr(0, slash_pos)));
+
529  sys->set_value_u(
+
530  boost::lexical_cast<double>(words[i][p].substr(slash_pos+1)));
+
531  sys->set_asymm(true);
+
532  } else {
+
533  sys->set_value_u(boost::lexical_cast<double>(words[i][p]));
+
534  sys->set_asymm(false);
+
535  }
+
536  if (sys->type() == "shape" || sys->type() == "shapeN2" ||
+
537  sys->type() == "shapeU") {
+
538  sys->set_scale(boost::lexical_cast<double>(words[i][p]));
+
539  LoadShapes(sys.get(), hist_mapping);
+
540  } else if (sys->type() == "shape?") {
+
541  // This might fail, so we have to "try"
+
542  try {
+
543  LoadShapes(sys.get(), hist_mapping);
+
544  } catch (std::exception & e) {
+
545  if (verbosity_ > 0) {
+
546  LOGLINE(log(), "Systematic with shape? did not resolve to a shape");
+
547  log() << e.what();
+
548  }
+
549  }
+
550  if (!sys->shape_u() || !sys->shape_d()) {
+
551  sys->set_type("lnN");
+
552  } else {
+
553  sys->set_type("shape");
+
554  sys->set_scale(boost::lexical_cast<double>(words[i][p]));
+
555  }
+
556  }
+
557  if (sys->type() == "shape" || sys->type() == "shapeN2" ||
+
558  sys->type() == "shapeU")
+
559  sys->set_asymm(true);
+
560 
+ +
562  if (sys->type() == "lnU" || sys->type() == "shapeU") {
+
563  params_.at(sys->name())->set_err_d(0.);
+
564  params_.at(sys->name())->set_err_u(0.);
+
565  }
+
566  systs_.push_back(sys);
+
567  }
+
568  }
+
569  }
+
570  if (single_obs) {
+
571  if (bin_names.size() == 1) {
+
572  single_obs->set_bin(*(bin_names.begin()));
+
573  LoadShapes(single_obs.get(), hist_mapping);
+
574  obs_.push_back(single_obs);
+
575  } else {
+
576  throw std::runtime_error(FNERROR(
+
577  "Input card specifies a single observation entry without a bin, but "
+
578  "multiple bins defined elsewhere"));
+
579  }
+
580  }
+
581 
+
582  // Finally populate the groups
+
583  for (auto const& grp : groups) {
+
584  this->SetGroup(grp.first, ch::Set2Vec(grp.second));
+
585  }
+
586  return 0;
+
587 }
+
588 
+
589 void CombineHarvester::WriteDatacard(std::string const& name,
+
590  std::string const& root_file) {
+
591  TFile file(root_file.c_str(), "RECREATE");
+ +
593  file.Close();
+
594 }
+
595 
+
596 void CombineHarvester::WriteDatacard(std::string const& name) {
+
597  TFile dummy;
+
598  CombineHarvester::WriteDatacard(name, dummy);
+
599  dummy.Close();
+
600 }
+
601 
+
602 void CombineHarvester::FillHistMappings(std::vector<HistMapping> & mappings) {
+
603  // Build maps of
+
604  // RooAbsData --> RooWorkspace
+
605  // RooAbsPdf --> RooWorkspace
+
606  std::map<RooAbsData const*, RooWorkspace*> data_ws_map;
+
607  std::map<RooAbsReal const*, RooWorkspace*> pdf_ws_map;
+
608  for (auto const& iter : wspaces_) {
+
609  auto dat = iter.second->allData();
+
610  for (auto d : dat) {
+
611  data_ws_map[d] = iter.second.get();
+
612  }
+
613  RooArgSet vars = iter.second->allPdfs();
+
614  for (RooAbsArg *v : vars) {
+
615  RooAbsPdf *y = dynamic_cast<RooAbsPdf*>(v);
616 
-
617  }
-
618  if (is_float(masses[0])) {
-
619  mappings.emplace_back(sig_proc, bin, bin + "/" + sig_proc + "$MASS",
-
620  bin + "/" + sig_proc + "$MASS_$SYSTEMATIC");
-
621  }
-
622  }
-
623  }
-
624 
-
625  // Generate mappings for RooFit objects
-
626  for (auto bin : bins) {
-
627  CombineHarvester ch_bin = std::move(this->cp().bin({bin}));
-
628  for (auto obs : ch_bin.obs_) {
-
629  if (!obs->data()) continue;
-
630  std::string obj_name = std::string(data_ws_map[obs->data()]->GetName()) +
-
631  ":" + std::string(obs->data()->GetName());
-
632  mappings.emplace_back("data_obs", obs->bin(), obj_name, "");
-
633  }
-
634 
-
635  bool prototype_ok = false;
-
636  HistMapping prototype;
-
637  std::vector<HistMapping> full_list;
-
638  auto pmap = ch_bin.GenerateProcSystMap();
-
639  for (unsigned i = 0; i < ch_bin.procs_.size(); ++i) {
-
640  ch::Process * proc = ch_bin.procs_[i].get();
-
641  if (!proc->data() && !proc->pdf()) continue;
-
642  std::string obj_name;
-
643  std::string obj_sys_name;
-
644  if (proc->data()) {
-
645  obj_name = std::string(proc->data()->GetName());
-
646  boost::replace_all(obj_name, proc->process(), "$PROCESS");
-
647  obj_name = std::string(data_ws_map[proc->data()]->GetName()) + ":" +
-
648  obj_name;
-
649  }
-
650  if (proc->pdf()) {
-
651  obj_name = std::string(proc->pdf()->GetName());
-
652  boost::replace_all(obj_name, proc->process(), "$PROCESS");
-
653  obj_name = std::string(pdf_ws_map[proc->pdf()]->GetName()) +
-
654  ":" + obj_name;
-
655  }
-
656  for (unsigned j = 0; j < pmap[i].size(); ++j) {
-
657  ch::Systematic const* sys = pmap[i][j];
-
658  if (sys->data_u()) {
-
659  obj_sys_name = std::string(sys->data_u()->GetName());
-
660  boost::replace_all(obj_sys_name, sys->name() + "Up", "$SYSTEMATIC");
-
661  boost::replace_all(obj_sys_name, sys->process(), "$PROCESS");
-
662  obj_sys_name = std::string(data_ws_map[sys->data_u()]->GetName()) +
-
663  ":" + obj_sys_name;
-
664  break;
-
665  }
-
666  if (sys->pdf_u()) {
-
667  obj_sys_name = std::string(sys->pdf_u()->GetName());
-
668  boost::replace_all(obj_sys_name, sys->name() + "Up", "$SYSTEMATIC");
-
669  boost::replace_all(obj_sys_name, sys->process(), "$PROCESS");
-
670  obj_sys_name = std::string(pdf_ws_map[sys->pdf_u()]->GetName()) +
-
671  ":" + obj_sys_name;
-
672  break;
-
673  }
-
674  }
+
617  if (y) pdf_ws_map[iter.second->pdf(y->GetName())] = iter.second.get();
+
618  }
+
619  RooArgSet fvars = iter.second->allFunctions();
+
620  for (RooAbsArg *fv : fvars) {
+
621  RooAbsReal *y = dynamic_cast<RooAbsReal*>(fv);
+
622  if (y) pdf_ws_map[iter.second->function(y->GetName())] = iter.second.get();
+
623  }
+
624  }
+
625 
+
626  // For writing TH1s we will hard code a set of patterns for each bin
+
627  // This assumes that the backgrounds will not depend on "mass" but the
+
628  // signal will. Will probably want to change this in the future
+
629  std::set<std::string> hist_bins;
+
630  auto bins = this->bin_set();
+
631  for (auto bin : bins) {
+
632  unsigned shape_count = std::count_if(procs_.begin(), procs_.end(),
+
633  [&](std::shared_ptr<ch::Process> p) {
+
634  return (p->bin() == bin && p->shape() && (!p->signal()));
+
635  });
+
636  shape_count += std::count_if(obs_.begin(), obs_.end(),
+
637  [&](std::shared_ptr<ch::Observation> p) {
+
638  return (p->bin() == bin && p->shape());
+
639  });
+
640  unsigned counting = std::count_if(
+
641  procs_.begin(), procs_.end(), [&](std::shared_ptr<ch::Process> p) {
+
642  return (p->bin() == bin && p->shape() == nullptr &&
+
643  p->pdf() == nullptr && p->data() == nullptr);
+
644  });
+
645  counting += std::count_if(
+
646  obs_.begin(), obs_.end(), [&](std::shared_ptr<ch::Observation> p) {
+
647  return (p->bin() == bin && p->shape() == nullptr &&
+
648  p->data() == nullptr);
+
649  });
+
650 
+
651  if (shape_count > 0) {
+
652  mappings.emplace_back("*", bin, bin + "/$PROCESS",
+
653  bin + "/$PROCESS_$SYSTEMATIC");
+
654  hist_bins.insert(bin);
+
655  } else if (counting > 0) {
+
656  mappings.emplace_back("*", bin, "", "");
+
657  mappings.back().is_fake = true;
+
658  }
+
659 
+
660  CombineHarvester ch_signals =
+
661  std::move(this->cp().bin({bin}).signals().histograms());
+
662  auto sig_proc_set =
+
663  ch_signals.SetFromProcs(std::mem_fn(&ch::Process::process));
+
664  for (auto sig_proc : sig_proc_set) {
+
665  // should only add this mapping if the signal process has a numeric mass
+
666  // value, otherwise we will write it using the background rule above
+
667  auto masses = Set2Vec(ch_signals.cp()
+
668  .process({sig_proc})
+
669  .SetFromProcs(std::mem_fn(&ch::Process::mass)));
+
670  if (masses.size() != 1) {
+
671  throw std::runtime_error(FNERROR("Process " + sig_proc + " in bin " +
+
672  bin +
+
673  " has multiple entries with multiple "
+
674  "mass values, this is not supported"));
675 
-
676  // If the prototype pattern is already filled, but doesn't equal this
-
677  // new pattern - then we can't use the prototype
-
678  if (prototype.pattern.size() && prototype.pattern != obj_name) {
-
679  prototype_ok = false;
+
676  }
+
677  if (is_float(masses[0])) {
+
678  mappings.emplace_back(sig_proc, bin, bin + "/" + sig_proc + "$MASS",
+
679  bin + "/" + sig_proc + "$MASS_$SYSTEMATIC");
680  }
-
681 
-
682  if (prototype.syst_pattern.size() && obj_sys_name.size() &&
-
683  prototype.syst_pattern != obj_sys_name) {
-
684  prototype_ok = false;
-
685  }
-
686 
-
687  if (!prototype.pattern.size()) {
-
688  prototype_ok = true;
-
689  prototype.process = "*";
-
690  prototype.category = bin;
-
691  prototype.pattern = obj_name;
-
692  }
-
693  if (!prototype.syst_pattern.size()) {
-
694  prototype.syst_pattern = obj_sys_name;
-
695  }
-
696 
-
697  full_list.emplace_back(proc->process(), proc->bin(), obj_name,
-
698  obj_sys_name);
-
699  }
-
700  // There are two reasons we won't want to write a generic mapping
-
701  // for the processes in this bin:
-
702  // 1) One or more processes is not described by the prototype mapping
-
703  // 2) We also have a generic histogram mapping for this bin
-
704  if (!prototype_ok || hist_bins.count(bin)) {
-
705  for (auto m : full_list) {
-
706  mappings.push_back(m);
-
707  }
-
708  } else {
-
709  mappings.push_back(prototype);
-
710  }
-
711  }
-
712 }
-
713 
-
714 
-
715 void CombineHarvester::WriteDatacard(std::string const& name,
-
716  TFile& root_file) {
-
717  using boost::format;
-
718 
-
719  // First figure out if this is a counting-experiment only
-
720  bool is_counting = true;
-
721  this->ForEachObs([&](ch::Observation *obs) {
-
722  if (obs->shape() != nullptr || obs->data() != nullptr) {
-
723  is_counting = false;
-
724  }
-
725  });
-
726  if (is_counting) {
-
727  this->ForEachProc([&](ch::Process *proc) {
-
728  if (proc->shape() != nullptr || proc->data() != nullptr ||
-
729  proc->pdf() != nullptr) {
-
730  is_counting = false;
-
731  }
-
732  });
-
733  }
+
681  }
+
682  }
+
683 
+
684  // Generate mappings for RooFit objects
+
685  for (auto bin : bins) {
+
686  CombineHarvester ch_bin = std::move(this->cp().bin({bin}));
+
687  for (auto obs : ch_bin.obs_) {
+
688  if (!obs->data()) continue;
+
689  std::string obj_name = std::string(data_ws_map[obs->data()]->GetName()) +
+
690  ":" + std::string(obs->data()->GetName());
+
691  mappings.emplace_back("data_obs", obs->bin(), obj_name, "");
+
692  }
+
693 
+
694  bool prototype_ok = false;
+
695  HistMapping prototype;
+
696  std::vector<HistMapping> full_list;
+
697  auto pmap = ch_bin.GenerateProcSystMap();
+
698  for (unsigned i = 0; i < ch_bin.procs_.size(); ++i) {
+
699  ch::Process * proc = ch_bin.procs_[i].get();
+
700  if (!proc->data() && !proc->pdf()) continue;
+
701  std::string obj_name;
+
702  std::string obj_sys_name;
+
703  if (proc->data()) {
+
704  obj_name = std::string(proc->data()->GetName());
+
705  boost::replace_all(obj_name, proc->process(), "$PROCESS");
+
706  obj_name = std::string(data_ws_map[proc->data()]->GetName()) + ":" +
+
707  obj_name;
+
708  }
+
709  if (proc->pdf()) {
+
710  obj_name = std::string(proc->pdf()->GetName());
+
711  boost::replace_all(obj_name, proc->process(), "$PROCESS");
+
712  obj_name = std::string(pdf_ws_map[proc->pdf()]->GetName()) +
+
713  ":" + obj_name;
+
714  }
+
715  for (unsigned j = 0; j < pmap[i].size(); ++j) {
+
716  ch::Systematic const* sys = pmap[i][j];
+
717  if (sys->data_u()) {
+
718  obj_sys_name = std::string(sys->data_u()->GetName());
+
719  boost::replace_all(obj_sys_name, sys->name() + "Up", "$SYSTEMATIC");
+
720  boost::replace_all(obj_sys_name, sys->process(), "$PROCESS");
+
721  obj_sys_name = std::string(data_ws_map[sys->data_u()]->GetName()) +
+
722  ":" + obj_sys_name;
+
723  break;
+
724  }
+
725  if (sys->pdf_u()) {
+
726  obj_sys_name = std::string(sys->pdf_u()->GetName());
+
727  boost::replace_all(obj_sys_name, sys->name() + "Up", "$SYSTEMATIC");
+
728  boost::replace_all(obj_sys_name, sys->process(), "$PROCESS");
+
729  obj_sys_name = std::string(pdf_ws_map[sys->pdf_u()]->GetName()) +
+
730  ":" + obj_sys_name;
+
731  break;
+
732  }
+
733  }
734 
-
735  // Allow a non-open ROOT file if this is purely a counting experiment
-
736  if (!root_file.IsOpen() && !is_counting) {
-
737  throw std::runtime_error(FNERROR(
-
738  std::string("Output ROOT file is not open: ") + root_file.GetName()));
-
739  }
+
735  // If the prototype pattern is already filled, but doesn't equal this
+
736  // new pattern - then we can't use the prototype
+
737  if (prototype.pattern.size() && prototype.pattern != obj_name) {
+
738  prototype_ok = false;
+
739  }
740 
-
741  std::unique_ptr<std::ostream> txt_file_ptr = nullptr;
-
742 
-
743  // Figure out if the datacard name ends with ".gz"
-
744  std::string zip_ext = ".gz";
-
745  bool has_zip_ext = (name.length() >= zip_ext.length() && name.compare(name.length() - zip_ext.length(), zip_ext.length(), zip_ext) == 0);
-
746 
-
747  if (has_zip_ext) {
-
748  txt_file_ptr = std::make_unique<zstr::ofstream>(name);
-
749  } else {
-
750  txt_file_ptr = std::make_unique<std::ofstream>(name);
-
751  }
-
752  if (txt_file_ptr->fail()) {
-
753  throw std::runtime_error(FNERROR("Unable to create file: " + name));
-
754  }
+
741  if (prototype.syst_pattern.size() && obj_sys_name.size() &&
+
742  prototype.syst_pattern != obj_sys_name) {
+
743  prototype_ok = false;
+
744  }
+
745 
+
746  if (!prototype.pattern.size()) {
+
747  prototype_ok = true;
+
748  prototype.process = "*";
+
749  prototype.category = bin;
+
750  prototype.pattern = obj_name;
+
751  }
+
752  if (!prototype.syst_pattern.size()) {
+
753  prototype.syst_pattern = obj_sys_name;
+
754  }
755 
-
756  std::ostream & txt_file = *txt_file_ptr;
-
757 
-
758  //txt_file << "# Datacard produced by CombineHarvester with git status: "
-
759  // << ch::GitVersion() << "\n";
-
760 
-
761  std::string dashes(80, '-');
-
762 
-
763  auto bin_set = this->SetFromProcs(std::mem_fn(&ch::Process::bin));
-
764  auto proc_set = this->SetFromProcs(std::mem_fn(&ch::Process::process));
-
765  std::set<std::string> sys_set;
-
766  std::set<std::string> rateparam_set;
-
767  this->ForEachSyst([&](ch::Systematic const* sys) {
-
768  if (sys->type() == "rateParam") {
-
769  rateparam_set.insert(sys->name());
-
770  } else {
-
771  sys_set.insert(sys->name());
-
772  }
-
773  });
-
774  txt_file << "imax " << bin_set.size()
-
775  << " number of bins\n";
-
776  txt_file << "jmax " << proc_set.size() - 1
-
777  << " number of processes minus 1\n";
-
778  txt_file << "kmax " << "*" << " number of nuisance parameters\n";
-
779  txt_file << dashes << "\n";
-
780 
-
781 
-
782  std::vector<HistMapping> mappings;
-
783  FillHistMappings(mappings);
-
784 
-
785  auto bins = this->SetFromObs(std::mem_fn(&ch::Observation::bin));
-
786 
-
787  auto proc_sys_map = this->GenerateProcSystMap();
-
788 
-
789  std::set<std::string> all_dependents_pars;
-
790  std::set<std::string> multipdf_cats;
-
791  for (auto proc : procs_) {
-
792  if (!proc->pdf()) continue;
-
793  // The rest of this is building the list of dependents
-
797  RooAbsData const* data_obj = FindMatchingData(proc.get());
-
798  RooArgSet par_list;
-
799  RooArgSet norm_par_list;
-
800 
-
801  if (data_obj) {
-
802  par_list.add(ParametersByName(proc->pdf(), data_obj->get()));
-
803  if (proc->norm()) {
-
804  norm_par_list.add(ParametersByName(proc->norm(), data_obj->get()));
-
805  }
-
806  } else {
-
807  RooRealVar mx("CMS_th1x" , "CMS_th1x", 0, 1);
-
808  RooArgSet tmp_set(mx);
-
809  par_list.add(ParametersByName(proc->pdf(), &tmp_set));
-
810  if (proc->norm()) {
-
811  norm_par_list.add(ParametersByName(proc->norm(), &tmp_set));
-
812  }
-
813  }
-
814  RooFIter par_list_it = par_list.fwdIterator();
-
815  RooAbsArg *par_list_var = nullptr;
-
816  while ((par_list_var = par_list_it.next())) {
-
817  if (dynamic_cast<RooRealVar*>(par_list_var)) {
-
818  all_dependents_pars.insert(par_list_var->GetName());
-
819  }
-
820  // If this pdf has a RooCategory parameter then it's probably a
-
821  // RooMultiPdf. We'll need to write a special line in the datacard to
-
822  // indicate that this is a discrete pdf index. However it's best to be
-
823  // sure, so we'll use ROOT's string-based RTTI to check the type without
-
824  // having to link against HiggsAnalysis/CombinedLimit
-
825  if (dynamic_cast<RooCategory*>(par_list_var) &&
-
826  proc->pdf()->InheritsFrom("RooMultiPdf")) {
-
827  multipdf_cats.insert(par_list_var->GetName());
-
828  }
-
829  }
-
830  if (proc->norm()) {
-
831  RooFIter nm_list_it = norm_par_list.fwdIterator();
-
832  RooAbsArg *nm_list_var = nullptr;
-
833  while ((nm_list_var = nm_list_it.next())) {
-
834  if (dynamic_cast<RooRealVar*>(nm_list_var)) {
-
835  all_dependents_pars.insert(nm_list_var->GetName());
-
836  }
-
837  }
-
838  }
-
839  }
-
840 
-
841  // The ROOT file mapping should be given as a relative path
-
842  std::string file_name = root_file.GetName();
-
843  // Get the full path to the output root file
-
844  // NOTE: was using canonical here instead of absolute, but not
-
845  // supported in boost 1.47
-
846  boost::filesystem::path root_file_path =
-
847  boost::filesystem::absolute(file_name);
-
848  // Get the full path to the directory containing the txt file
-
849  boost::filesystem::path txt_file_path =
-
850  boost::filesystem::absolute(name).parent_path();
-
851  // Compute the relative path from the txt file to the root file
-
852  file_name = make_relative(txt_file_path, root_file_path).string();
-
853 
-
854  // Keep track of the workspaces we actually need to write into the
-
855  // output file
-
856  std::set<std::string> used_wsps;
-
857 
-
858  for (auto const& mapping : mappings) {
-
859  if (!mapping.is_fake) {
-
860  txt_file << format("shapes %s %s %s %s %s\n")
-
861  % mapping.process
-
862  % mapping.category
-
863  % file_name
-
864  % mapping.pattern
-
865  % mapping.syst_pattern;
-
866  if (mapping.IsPdf() || mapping.IsData()) {
-
867  used_wsps.insert(mapping.WorkspaceName());
-
868  if (mapping.syst_pattern != "") {
-
869  used_wsps.insert(mapping.SystWorkspaceName());
-
870  }
-
871  }
-
872  } else {
-
873  txt_file << format("shapes %s %s %s\n")
-
874  % mapping.process
-
875  % mapping.category
-
876  % "FAKE";
-
877  }
-
878  }
-
879  txt_file << dashes << "\n";
-
880 
-
881  if (!is_counting) {
-
882  for (auto ws_it : wspaces_) {
-
883  if (ws_it.first == "_rateParams") continue; // don't write this one
-
884  // Also skip any workspace that isn't needed for this card
-
885  if (!used_wsps.count(ws_it.second->GetName())) continue;
-
886  ch::WriteToTFile(ws_it.second.get(), &root_file, ws_it.second->GetName());
-
887  }
-
888  }
-
889 
-
890  // Writing observations
-
891  if (obs_.size() > 0) {
-
892  txt_file << "bin ";
-
893  for (auto const& obs : obs_) {
-
894  txt_file << format("%-15s ") % obs->bin();
-
895  if (obs->shape()) {
-
896  bool add_dir = TH1::AddDirectoryStatus();
-
897  TH1::AddDirectory(false);
-
898  std::unique_ptr<TH1> h((TH1*)(obs->shape()->Clone()));
-
899  h->Scale(obs->rate());
-
900  WriteHistToFile(h.get(), &root_file, mappings, obs->bin(), "data_obs",
-
901  obs->mass(), "", 0);
-
902  TH1::AddDirectory(add_dir);
-
903  }
-
904  }
-
905  txt_file << "\n";
-
906  txt_file << "observation ";
-
907  // On the precision of the observation yields: .1f is not sufficient for
-
908  // combine to be happy if we have some asimov dataset with non-integer values.
-
909  // We could just always give .4f but this doesn't look nice for the majority
-
910  // of cards that have real data. Instead we'll check...
-
911  std::string obs_fmt_int = "%-15.1f ";
-
912  std::string obs_fmt_flt = "%-15.4f ";
-
913  for (auto const& obs : obs_) {
-
914  bool is_float =
-
915  std::fabs(obs->rate() - std::round(obs->rate())) > 1E-4;
-
916  txt_file << format(is_float ? obs_fmt_flt : obs_fmt_int)
-
917  % obs->rate();
-
918  }
-
919  txt_file << "\n";
-
920  txt_file << dashes << "\n";
-
921  }
-
922 
-
923  unsigned sys_str_len = 14;
-
924  for (auto const& sys : sys_set) {
-
925  if (sys.length() > sys_str_len) sys_str_len = sys.length();
-
926  }
-
927  for (auto const& sys : all_dependents_pars) {
-
928  if (sys.length() > sys_str_len) sys_str_len = sys.length();
-
929  }
-
930  std::string sys_str_short = boost::lexical_cast<std::string>(sys_str_len);
-
931  std::string sys_str_long = boost::lexical_cast<std::string>(sys_str_len+9);
-
932 
-
933  auto getProcLen = [](auto const& proc) -> std::string {
-
934  std::size_t proc_len = 15;
-
935  proc_len = std::max(proc_len, proc->process().size());
-
936  std::string proc_len_str = boost::lexical_cast<std::string>(proc_len);
-
937  return proc_len_str;
-
938  };
+
756  full_list.emplace_back(proc->process(), proc->bin(), obj_name,
+
757  obj_sys_name);
+
758  }
+
759  // There are two reasons we won't want to write a generic mapping
+
760  // for the processes in this bin:
+
761  // 1) One or more processes is not described by the prototype mapping
+
762  // 2) We also have a generic histogram mapping for this bin
+
763  if (!prototype_ok || hist_bins.count(bin)) {
+
764  for (auto m : full_list) {
+
765  mappings.push_back(m);
+
766  }
+
767  } else {
+
768  mappings.push_back(prototype);
+
769  }
+
770  }
+
771 }
+
772 
+
773 
+
774 void CombineHarvester::WriteDatacard(std::string const& name,
+
775  TFile& root_file) {
+
776  using boost::format;
+
777 
+
778  // First figure out if this is a counting-experiment only
+
779  bool is_counting = true;
+
780  this->ForEachObs([&](ch::Observation *obs) {
+
781  if (obs->shape() != nullptr || obs->data() != nullptr) {
+
782  is_counting = false;
+
783  }
+
784  });
+
785  if (is_counting) {
+
786  this->ForEachProc([&](ch::Process *proc) {
+
787  if (proc->shape() != nullptr || proc->data() != nullptr ||
+
788  proc->pdf() != nullptr) {
+
789  is_counting = false;
+
790  }
+
791  });
+
792  }
+
793 
+
794  // Allow a non-open ROOT file if this is purely a counting experiment
+
795  if (!root_file.IsOpen() && !is_counting) {
+
796  throw std::runtime_error(FNERROR(
+
797  std::string("Output ROOT file is not open: ") + root_file.GetName()));
+
798  }
+
799 
+
800  std::unique_ptr<std::ostream> txt_file_ptr = nullptr;
+
801 
+
802  // Figure out if the datacard name ends with ".gz"
+
803  std::string zip_ext = ".gz";
+
804  bool has_zip_ext = (name.length() >= zip_ext.length() && name.compare(name.length() - zip_ext.length(), zip_ext.length(), zip_ext) == 0);
+
805 
+
806  if (has_zip_ext) {
+
807  txt_file_ptr = std::make_unique<zstr::ofstream>(name);
+
808  } else {
+
809  txt_file_ptr = std::make_unique<std::ofstream>(name);
+
810  }
+
811  if (txt_file_ptr->fail()) {
+
812  throw std::runtime_error(FNERROR("Unable to create file: " + name));
+
813  }
+
814 
+
815  std::ostream & txt_file = *txt_file_ptr;
+
816 
+
817  //txt_file << "# Datacard produced by CombineHarvester with git status: "
+
818  // << ch::GitVersion() << "\n";
+
819 
+
820  std::string dashes(80, '-');
+
821 
+
822  auto bin_set = this->SetFromProcs(std::mem_fn(&ch::Process::bin));
+
823  auto proc_set = this->SetFromProcs(std::mem_fn(&ch::Process::process));
+
824  std::set<std::string> sys_set;
+
825  std::set<std::string> param_set;
+
826  std::set<std::string> rateparam_set;
+
827  this->ForEachSyst([&](ch::Systematic const* sys) {
+
828  if (sys->type() == "rateParam") {
+
829  rateparam_set.insert(sys->name());
+
830  }
+
831  else if (sys->type() == "param"){
+
832  param_set.insert(sys->name());
+
833  }
+
834  else sys_set.insert(sys->name());
+
835  });
+
836  txt_file << "imax " << bin_set.size()
+
837  << " number of bins\n";
+
838  txt_file << "jmax " << proc_set.size() - 1
+
839  << " number of processes minus 1\n";
+
840  txt_file << "kmax " << "*" << " number of nuisance parameters\n";
+
841  txt_file << dashes << "\n";
+
842 
+
843 
+
844  std::vector<HistMapping> mappings;
+
845  FillHistMappings(mappings);
+
846 
+
847  auto bins = this->SetFromObs(std::mem_fn(&ch::Observation::bin));
+
848 
+
849  auto proc_sys_map = this->GenerateProcSystMap();
+
850 
+
851  std::set<std::string> all_dependents_pars;
+
852  std::set<std::string> multipdf_cats;
+
853  for (auto proc : procs_) {
+
854  if (!proc->pdf()) continue;
+
855  // The rest of this is building the list of dependents
+
859  RooAbsData const* data_obj = FindMatchingData(proc.get());
+
860  RooArgSet par_list;
+
861  RooArgSet norm_par_list;
+
862 
+
863  if (data_obj) {
+
864  par_list.add(ParametersByName(proc->pdf(), data_obj->get()));
+
865  if (proc->norm()) {
+
866  norm_par_list.add(ParametersByName(proc->norm(), data_obj->get()));
+
867  }
+
868  } else {
+
869  RooRealVar mx("CMS_th1x" , "CMS_th1x", 0, 1);
+
870  RooArgSet tmp_set(mx);
+
871  par_list.add(ParametersByName(proc->pdf(), &tmp_set));
+
872  if (proc->norm()) {
+
873  norm_par_list.add(ParametersByName(proc->norm(), &tmp_set));
+
874  }
+
875  }
+
876  for (RooAbsArg *par_list_var : par_list) {
+
877  if (dynamic_cast<RooRealVar*>(par_list_var)) {
+
878  all_dependents_pars.insert(par_list_var->GetName());
+
879  }
+
880  // If this pdf has a RooCategory parameter then it's probably a
+
881  // RooMultiPdf. We'll need to write a special line in the datacard to
+
882  // indicate that this is a discrete pdf index. However it's best to be
+
883  // sure, so we'll use ROOT's string-based RTTI to check the type without
+
884  // having to link against HiggsAnalysis/CombinedLimit
+
885  if (dynamic_cast<RooCategory*>(par_list_var) &&
+
886  proc->pdf()->InheritsFrom("RooMultiPdf")) {
+
887  multipdf_cats.insert(par_list_var->GetName());
+
888  }
+
889 
+
890 }
+
891  if (proc->norm()) {
+
892  for (RooAbsArg *nm_list_var: norm_par_list) {
+
893  if (dynamic_cast<RooRealVar*>(nm_list_var)) {
+
894  all_dependents_pars.insert(nm_list_var->GetName());
+
895  }
+
896  }
+
897  }
+
898  }
+
899 
+
900  // The ROOT file mapping should be given as a relative path
+
901  std::string file_name = root_file.GetName();
+
902  // Get the full path to the output root file
+
903  // NOTE: was using canonical here instead of absolute, but not
+
904  // supported in boost 1.47
+
905  boost::filesystem::path root_file_path =
+
906  boost::filesystem::absolute(file_name);
+
907  // Get the full path to the directory containing the txt file
+
908  boost::filesystem::path txt_file_path =
+
909  boost::filesystem::absolute(name).parent_path();
+
910  // Compute the relative path from the txt file to the root file
+
911  file_name = make_relative(txt_file_path, root_file_path).string();
+
912 
+
913  // Keep track of the workspaces we actually need to write into the
+
914  // output file
+
915  std::set<std::string> used_wsps;
+
916 
+
917  for (auto const& mapping : mappings) {
+
918  if (!mapping.is_fake) {
+
919  txt_file << format("shapes %s %s %s %s %s\n")
+
920  % mapping.process
+
921  % mapping.category
+
922  % file_name
+
923  % mapping.pattern
+
924  % mapping.syst_pattern;
+
925  if (mapping.IsPdf() || mapping.IsData()) {
+
926  used_wsps.insert(mapping.WorkspaceName());
+
927  if (mapping.syst_pattern != "") {
+
928  used_wsps.insert(mapping.SystWorkspaceName());
+
929  }
+
930  }
+
931  } else {
+
932  txt_file << format("shapes %s %s %s\n")
+
933  % mapping.process
+
934  % mapping.category
+
935  % "FAKE";
+
936  }
+
937  }
+
938  txt_file << dashes << "\n";
939 
-
940  txt_file << format("%-"+sys_str_long+"s") % "bin";
-
941  for (auto const& proc : procs_) {
-
942  if (proc->shape()) {
-
943  bool add_dir = TH1::AddDirectoryStatus();
-
944  TH1::AddDirectory(false);
-
945  std::unique_ptr<TH1> h = proc->ClonedScaledShape();
-
946  WriteHistToFile(h.get(), &root_file, mappings, proc->bin(),
-
947  proc->process(), proc->mass(), "", 0);
-
948  TH1::AddDirectory(add_dir);
-
949  }
-
950  txt_file << format("%-"+getProcLen(proc)+"s ") % proc->bin();
-
951  }
-
952  txt_file << "\n";
-
953 
-
954  txt_file << format("%-"+sys_str_long+"s") % "process";
-
955 
-
956  for (auto const& proc : procs_) {
-
957  txt_file << format("%-"+getProcLen(proc)+"s ") % proc->process();
-
958  }
-
959  txt_file << "\n";
-
960 
-
961  txt_file << format("%-"+sys_str_long+"s") % "process";
-
962 
-
963  // Setup process_ids first
-
964  std::map<std::string, int> p_ids;
-
965  unsigned sig_id = 0;
-
966  unsigned bkg_id = 1;
-
967  for (unsigned p = 0; p < procs_.size(); ++p) {
-
968  if (!procs_[p]->signal()) {
-
969  if (p_ids.count(procs_[p]->process()) == 0) {
-
970  p_ids[procs_[p]->process()] = bkg_id;
-
971  ++bkg_id;
-
972  }
-
973  else {
-
974  // check if process was already picked up as signal
-
975  if (p_ids[procs_[p]->process()] <= 0) throw std::runtime_error(FNERROR("Ambiguous definition of process (" + procs_[p]->process() + ") as both signal and background"));
-
976  }
+
940  if (!is_counting) {
+
941  for (auto ws_it : wspaces_) {
+
942  if (ws_it.first == "_rateParams") continue; // don't write this one
+
943  // Also skip any workspace that isn't needed for this card
+
944  if (!used_wsps.count(ws_it.second->GetName())) continue;
+
945  ch::WriteToTFile(ws_it.second.get(), &root_file, ws_it.second->GetName());
+
946  }
+
947  }
+
948 
+
949  // Writing observations
+
950  if (obs_.size() > 0) {
+
951  txt_file << "bin ";
+
952  for (auto const& obs : obs_) {
+
953  txt_file << format("%-15s ") % obs->bin();
+
954  if (obs->shape()) {
+
955  bool add_dir = TH1::AddDirectoryStatus();
+
956  TH1::AddDirectory(false);
+
957  std::unique_ptr<TH1> h((TH1*)(obs->shape()->Clone()));
+
958  h->Scale(obs->rate());
+
959  WriteHistToFile(h.get(), &root_file, mappings, obs->bin(), "data_obs",
+
960  obs->mass(), "", 0);
+
961  TH1::AddDirectory(add_dir);
+
962  }
+
963  }
+
964  txt_file << "\n";
+
965  txt_file << "observation ";
+
966  // On the precision of the observation yields: .1f is not sufficient for
+
967  // combine to be happy if we have some asimov dataset with non-integer values.
+
968  // We could just always give .4f but this doesn't look nice for the majority
+
969  // of cards that have real data. Instead we'll check...
+
970  std::string obs_fmt_int = "%-15.1f ";
+
971  std::string obs_fmt_flt = "%-15.4f ";
+
972  for (auto const& obs : obs_) {
+
973  bool is_float =
+
974  std::fabs(obs->rate() - std::round(obs->rate())) > 1E-4;
+
975  txt_file << format(is_float ? obs_fmt_flt : obs_fmt_int)
+
976  % obs->rate();
977  }
-
978  unsigned q = procs_.size() - (p + 1);
-
979  if (procs_[q]->signal()) {
-
980  if (p_ids.count(procs_[q]->process()) == 0) {
-
981  p_ids[procs_[q]->process()] = sig_id;
-
982  --sig_id;
-
983  }
-
984  else {
-
985  // check if process was already picked up as background
-
986  if (p_ids[procs_[q]->process()] > 0) throw std::runtime_error(FNERROR("Ambiguous definition of process (" + procs_[q]->process() + ") as both signal and background"));
-
987  }
-
988  }
-
989  }
-
990  for (auto const& proc : procs_) {
-
991  txt_file << format("%-"+getProcLen(proc)+"s ") % p_ids[proc->process()];
-
992  }
-
993  txt_file << "\n";
-
994 
-
995 
-
996  txt_file << format("%-"+sys_str_long+"s") % "rate";
-
997  for (auto const& proc : procs_) {
-
998  txt_file << format("%-"+getProcLen(proc)+".6g ") % proc->no_norm_rate();
-
999  }
-
1000  txt_file << "\n";
-
1001  txt_file << dashes << "\n";
-
1002 
-
1003  // Need to write parameters here that feature both in the list of pdf
-
1004  // dependents and sys_set.
-
1005  for (auto par : params_) {
-
1006  Parameter const* p = par.second.get();
-
1007  if (p->err_d() != 0.0 && p->err_u() != 0.0 &&
-
1008  all_dependents_pars.count(p->name()) && sys_set.count(p->name())) {
-
1009  txt_file << format((format("%%-%is param %%g %%g") % sys_str_len).str()) %
-
1010  p->name() % p->val() % ((p->err_u() - p->err_d()) / 2.0);
-
1011  if (p->range_d() != std::numeric_limits<double>::lowest() &&
-
1012  p->range_u() != std::numeric_limits<double>::max()) {
-
1013  txt_file << format(" [%.4g,%.4g]") % p->range_d() % p->range_u();
-
1014  }
-
1015  txt_file << "\n";
-
1016  }
+
978  txt_file << "\n";
+
979  txt_file << dashes << "\n";
+
980  }
+
981 
+
982  unsigned sys_str_len = 14;
+
983  for (auto const& sys : sys_set) {
+
984  if (sys.length() > sys_str_len) sys_str_len = sys.length();
+
985  }
+
986  for (auto const& sys : all_dependents_pars) {
+
987  if (sys.length() > sys_str_len) sys_str_len = sys.length();
+
988  }
+
989  std::string sys_str_short = boost::lexical_cast<std::string>(sys_str_len);
+
990  std::string sys_str_long = boost::lexical_cast<std::string>(sys_str_len+9);
+
991 
+
992  auto getProcLen = [](auto const& proc) -> std::string {
+
993  std::size_t proc_len = 15;
+
994  proc_len = std::max(proc_len, proc->process().size());
+
995  std::string proc_len_str = boost::lexical_cast<std::string>(proc_len);
+
996  return proc_len_str;
+
997  };
+
998 
+
999  txt_file << format("%-"+sys_str_long+"s") % "bin";
+
1000  for (auto const& proc : procs_) {
+
1001  if (proc->shape()) {
+
1002  bool add_dir = TH1::AddDirectoryStatus();
+
1003  TH1::AddDirectory(false);
+
1004  std::unique_ptr<TH1> h = proc->ClonedScaledShape();
+
1005  WriteHistToFile(h.get(), &root_file, mappings, proc->bin(),
+
1006  proc->process(), proc->mass(), "", 0);
+
1007  TH1::AddDirectory(add_dir);
+
1008  }
+
1009  txt_file << format("%-"+getProcLen(proc)+"s ") % proc->bin();
+
1010  }
+
1011  txt_file << "\n";
+
1012 
+
1013  txt_file << format("%-"+sys_str_long+"s") % "process";
+
1014 
+
1015  for (auto const& proc : procs_) {
+
1016  txt_file << format("%-"+getProcLen(proc)+"s ") % proc->process();
1017  }
-
1018 
-
1019  for (auto const& sys : sys_set) {
-
1020  std::vector<std::string> line(procs_.size() + 2);
-
1021  line[0] = sys;
-
1022  bool seen_lnN = false;
-
1023  bool seen_lnU = false;
-
1024  bool seen_shape = false;
-
1025  bool seen_shapeN2 = false;
-
1026  bool seen_shapeU = false;
-
1027  for (unsigned p = 0; p < procs_.size(); ++p) {
-
1028  line[p + 2] = "-";
-
1029  for (unsigned n = 0; n < proc_sys_map[p].size(); ++n) {
-
1030  ch::Systematic const* ptr = proc_sys_map[p][n];
-
1031  // Only interested into Systematics with name "sys"
-
1032  if (ptr->name() != sys) continue;
-
1033  std::string tp = ptr->type();
-
1034  if (tp == "lnN" || tp == "lnU") {
-
1035  if (tp == "lnN") seen_lnN = true;
-
1036  if (tp == "lnU") seen_lnU = true;
-
1037  line[p + 2] =
-
1038  ptr->asymm()
-
1039  ? (format("%g/%g") % ptr->value_d() % ptr->value_u()).str()
-
1040  : (format("%g") % ptr->value_u()).str();
-
1041  break;
-
1042  }
-
1043  if (tp == "shape" || tp == "shapeN2" || tp == "shapeU") {
-
1044  if (tp == "shape") seen_shape = true;
-
1045  if (tp == "shapeN2") seen_shapeN2 = true;
-
1046  if (tp == "shapeU") seen_shapeU = true;
-
1047  line[p + 2] = (format("%g") % ptr->scale()).str();
-
1048  if (ptr->shape_u() && ptr->shape_d()) {
-
1049  bool add_dir = TH1::AddDirectoryStatus();
-
1050  TH1::AddDirectory(false);
-
1051  std::unique_ptr<TH1> h_d = ptr->ClonedShapeD();
-
1052  h_d->Scale(procs_[p]->rate() * ptr->value_d());
-
1053  WriteHistToFile(h_d.get(), &root_file, mappings, ptr->bin(),
-
1054  ptr->process(), ptr->mass(), ptr->name(), 1);
-
1055  std::unique_ptr<TH1> h_u = ptr->ClonedShapeU();
-
1056  h_u->Scale(procs_[p]->rate() * ptr->value_u());
-
1057  WriteHistToFile(h_u.get(), &root_file, mappings, ptr->bin(),
-
1058  ptr->process(), ptr->mass(), ptr->name(), 2);
-
1059  TH1::AddDirectory(add_dir);
-
1060  break;
-
1061  } else if ( (ptr->data_u() && ptr->data_d()) || (ptr->pdf_u() && ptr->pdf_d()) ) {
-
1062  } else {
-
1063  if (!flags_.at("allow-missing-shapes")) {
-
1064  std::stringstream err;
-
1065  err << "Trying to write shape uncertainty with missing "
-
1066  "shapes:\n";
-
1067  err << Systematic::PrintHeader << *ptr;
-
1068  throw std::runtime_error(FNERROR(err.str()));
-
1069  }
-
1070  }
-
1071  }
-
1072  }
-
1073  }
-
1074  if (seen_shapeN2) {
-
1075  line[1] = "shapeN2";
-
1076  } else if (seen_shapeU) {
-
1077  line[1] = "shapeU";
-
1078  } else if (seen_lnU) {
-
1079  line[1] = "lnU";
-
1080  } else if (seen_lnN && !seen_shape) {
-
1081  line[1] = "lnN";
-
1082  } else if (!seen_lnN && seen_shape) {
-
1083  line[1] = "shape";
-
1084  } else if (seen_lnN && seen_shape) {
-
1085  line[1] = "shape?";
-
1086  } else {
-
1087  throw std::runtime_error(FNERROR("Systematic type could not be deduced"));
-
1088  }
-
1089  txt_file << format("%-" + sys_str_short + "s %-7s ") % line[0] % line[1];
-
1090  for (unsigned p = 0; p < procs_.size(); ++p) {
-
1091  txt_file << format("%-"+getProcLen(procs_[p])+"s ") % line[p + 2];
-
1092  }
-
1093  txt_file << "\n";
-
1094  }
-
1095  // write param line for any parameter which has a non-zero error
-
1096  // and which doesn't appear in list of nuisances
-
1097  CombineHarvester ch_rp = this->cp().syst_type({"rateParam"});
-
1098  // These are all the processes with a rateParam. We'll look at each one and
-
1099  // see if every bin with this process also has this rateParam.
-
1100  std::vector<std::vector<std::string> > floating_params;
-
1101  for (auto const& sys : rateparam_set) {
-
1102  FNLOGC(log(), verbosity_ > 1) << "Doing rateParam: " << sys << "\n";
-
1103  auto procs_rp = ch_rp.cp().syst_name({sys}).SetFromSysts(
-
1104  std::mem_fn(&ch::Systematic::process));
-
1105  FNLOGC(log(), verbosity_ > 1) << "Procs for this rateParam: \n";
-
1106  for (auto const& proc : procs_rp) {
-
1107  FNLOGC(log(), verbosity_ > 1) << " - " << proc << "\n";
-
1108  // Get the set of bins
-
1109  auto bins_rp = ch_rp.cp().process({proc}).syst_name({sys}).SetFromSysts(
-
1110  std::mem_fn(&ch::Systematic::bin));
-
1111  auto bins_all = this->cp().process({proc}).bin_set();
-
1112  if (bins_rp.size() > 0 && bins_rp.size() == bins_all.size()) {
-
1113  floating_params.push_back({sys, "*", proc});
-
1114  } else {
-
1115  for (auto const& bin : bins_rp) {
-
1116  floating_params.push_back({sys, bin, proc});
-
1117  }
-
1118  }
-
1119  FNLOGC(log(), verbosity_ > 1)
-
1120  << bins_rp.size() << "/" << bins_all.size()
-
1121  << " bins with this process have a rateParam\n";
-
1122  }
-
1123  }
-
1124  std::set<std::string> frozen_params;
-
1125  for (auto const& rp : floating_params) {
-
1126  if (params_.count(rp[0])) {
-
1127  ch::Parameter const* par = params_.at(rp[0]).get();
-
1128  txt_file << format("%-" + sys_str_short + "s %-10s %-10s %-10s %g") %
-
1129  rp[0] % "rateParam" % rp[1] % rp[2] % par->val();
-
1130  // Check if we have to set the range too
-
1131  // TODO: should package this into some function in ch::Parameter
-
1132  if (par->range_d() != std::numeric_limits<double>::lowest() &&
-
1133  par->range_u() != std::numeric_limits<double>::max()) {
-
1134  txt_file << format(" [%.4g,%.4g]") % par->range_d() % par->range_u();
-
1135  }
-
1136  txt_file << "\n";
-
1137  if (par->frozen()) {
-
1138  frozen_params.insert(rp[0]);
-
1139  }
-
1140  }
-
1141  }
-
1142  for (auto const& par : frozen_params) {
-
1143  txt_file << "nuisance edit freeze " << par << "\n";
-
1144  }
-
1145  std::set<std::string> all_fn_param_args;
-
1146  for (auto const& rp : floating_params) {
-
1147  if (!params_.count(rp[0])) {
-
1148  // If we don't have a ch::Parameter with this name, then we'll assume
-
1149  // this is a function
-
1150  RooWorkspace *rp_ws = wspaces_.at("_rateParams").get();
-
1151  RooAbsArg *arg = rp_ws->arg(rp[0].c_str());
-
1152  if (arg->getStringAttribute("wspSource")) {
-
1153  txt_file << format("%-" + sys_str_short +
-
1154  "s %-10s %-10s %-10s %-20s\n") %
-
1155  rp[0] % "rateParam" % rp[1] % rp[2] % std::string(arg->getStringAttribute("wspSource"));
-
1156  continue;
-
1157  }
-
1158  RooFormulaVar* form =
-
1159  dynamic_cast<RooFormulaVar*>(arg);
-
1160  // Want to extract the formula string, apparently "printMetaArgs" is the
-
1161  // only way to do it
-
1162  std::stringstream ss;
-
1163  form->printMetaArgs(ss);
-
1164  std::string form_str = ss.str();
-
1165  // The string will be like 'formula="blah"', strip everything on either
-
1166  // side of the double quotes (including the quotes themselves)
-
1167  std::size_t first = form_str.find_first_of('"');
-
1168  std::size_t last = form_str.find_last_of('"');
-
1169  form_str = form_str.substr(first + 1, last - first - 1);
-
1170  // unique_ptr because we own the RooArgSet that is generated
-
1171  unsigned npars =
-
1172  std::unique_ptr<RooArgSet>(form->getParameters(RooArgList()))->getSize();
-
1173  std::string args = "";
-
1174  for (unsigned i = 0; i < npars; ++i) {
-
1175  all_fn_param_args.insert(std::string(form->getParameter(i)->GetName()));
-
1176  args += std::string(form->getParameter(i)->GetName());
-
1177  if (i < (npars-1)) {
-
1178  args += ",";
-
1179  }
-
1180  }
-
1181  txt_file << format("%-" + sys_str_short +
-
1182  "s %-10s %-10s %-10s %-20s %s\n") %
-
1183  rp[0] % "rateParam" % rp[1] % rp[2] % form_str % args;
-
1184  }
-
1185  }
-
1186 
-
1187  if (wspaces_.count("_rateParams")) {
-
1188  RooWorkspace *rp_ws = wspaces_.at("_rateParams").get();
-
1189  RooArgSet vars = rp_ws->allVars();
-
1190  auto v = vars.createIterator();
-
1191  do {
-
1192  RooRealVar *y = dynamic_cast<RooRealVar*>(**v);
-
1193  if (y && y->getAttribute("extArg") && all_fn_param_args.count(std::string(y->GetName()))) {
-
1194  Parameter const* p = params_.at(y->GetName()).get();
-
1195  txt_file << format("%-" + sys_str_short + "s %-10s %g") %
-
1196  y->GetName() % "extArg" % p->val();
-
1197  if (p->range_d() != std::numeric_limits<double>::lowest() &&
-
1198  p->range_u() != std::numeric_limits<double>::max()) {
-
1199  txt_file << format(" [%.4g,%.4g]") % p->range_d() % p->range_u();
-
1200  }
-
1201  txt_file << "\n";
-
1202 
-
1203  }
-
1204  } while (v->Next());
-
1205  RooArgSet funcs = rp_ws->allFunctions();
-
1206  v = funcs.createIterator();
-
1207  do {
-
1208  RooAbsReal *y = dynamic_cast<RooAbsReal*>(**v);
-
1209  if (y && y->getAttribute("extArg") && y->getStringAttribute("wspSource") && all_fn_param_args.count(std::string(y->GetName()))) {
-
1210  txt_file << format("%-" + sys_str_short +
-
1211  "s %-10s %-20s\n") %
-
1212  y->GetName() % "extArg" % std::string(y->getStringAttribute("wspSource"));
-
1213  continue;
-
1214 
-
1215  }
-
1216  } while (v->Next());
-
1217  }
-
1218 
-
1219  std::set<std::string> ws_vars;
-
1220  for (auto iter : wspaces_) {
-
1221  RooArgSet vars = iter.second->allVars();
-
1222  auto v = vars.createIterator();
-
1223  do {
-
1224  RooRealVar *y = dynamic_cast<RooRealVar*>(**v);
-
1225  if (y) {
-
1226  ws_vars.insert(y->GetName());
-
1227  }
-
1228  } while (v->Next());
-
1229  }
-
1230 
-
1231  // How to check for params we need to write:
-
1232  // Get a list of all pdf dependents for the processes we've just written
-
1233  // Also need a list of all Systematic entries we've just written
-
1234  // Then we write param if:
-
1235  // - it has non-zero errors
-
1236  // - it appears in the first list
-
1237  // - it doesn't appear in the second list
-
1238  for (auto par : params_) {
-
1239  Parameter const* p = par.second.get();
-
1240  if (p->err_d() != 0.0 && p->err_u() != 0.0 &&
-
1241  all_dependents_pars.count(p->name()) && !sys_set.count(p->name())) {
-
1242  txt_file << format((format("%%-%is param %%g %%g") % sys_str_len).str()) %
-
1243  p->name() % p->val() % ((p->err_u() - p->err_d()) / 2.0);
-
1244  if (p->range_d() != std::numeric_limits<double>::lowest() &&
-
1245  p->range_u() != std::numeric_limits<double>::max()) {
-
1246  txt_file << format(" [%.4g,%.4g]") % p->range_d() % p->range_u();
-
1247  }
-
1248  txt_file << "\n";
-
1249  }
-
1250  }
-
1251 
-
1252  for (auto par : multipdf_cats) {
-
1253  txt_file << format((format("%%-%is discrete\n") % sys_str_len).str()) % par;
-
1254  }
-
1255 
-
1256  for (auto stat_settings : auto_stats_settings_) {
-
1257  if (!bin_set.count(stat_settings.first)) continue;
-
1258  txt_file << format("%s autoMCStats %g %i %i\n") % stat_settings.first %
-
1259  stat_settings.second.event_threshold %
-
1260  stat_settings.second.include_signal %
-
1261  stat_settings.second.hist_mode;
-
1262  }
-
1263 
-
1264  // Finally write the NP groups
-
1265  // We should only consider parameters are either:
-
1266  // - in the list of pdf dependents
-
1267  // - in the list of systematics
-
1268  std::map<std::string, std::set<std::string>> groups;
-
1269  for (auto const& par : params_) {
-
1270  Parameter * p = par.second.get();
-
1271  if (!all_dependents_pars.count(p->name()) && !sys_set.count(p->name())) {
-
1272  continue;
-
1273  }
-
1274  if (p->err_d() == 0.0 && p->err_u() == 0.0) continue;
-
1275  for (auto const& str : p->groups()) {
-
1276  if (!groups.count(str)) {
-
1277  groups[str] = std::set<std::string>();
-
1278  }
-
1279  groups[str].insert(p->name());
-
1280  }
-
1281  }
-
1282  for (auto const& gr : groups) {
-
1283  txt_file << format("%s group =") % gr.first;
-
1284  for (auto const& np : gr.second) {
-
1285  txt_file << " " << np;
-
1286  }
-
1287  txt_file << "\n";
-
1288  }
-
1289 
-
1290  for (auto const& postl : post_lines_) {
-
1291  txt_file << postl << "\n";
-
1292  }
-
1293 }
-
1294 
-
1295 void CombineHarvester::WriteHistToFile(
-
1296  TH1 * hist,
-
1297  TFile * file,
-
1298  std::vector<HistMapping> const& mappings,
-
1299  std::string const& bin,
-
1300  std::string const& process,
-
1301  std::string const& mass,
-
1302  std::string const& nuisance,
-
1303  unsigned type) {
-
1304  StrPairVec attempts = this->GenerateShapeMapAttempts(process, bin);
-
1305  for (unsigned a = 0; a < attempts.size(); ++a) {
-
1306  for (unsigned m = 0; m < mappings.size(); ++m) {
-
1307  if ((attempts[a].first == mappings[m].process) &&
-
1308  (attempts[a].second == mappings[m].category)) {
-
1309  std::string p = (type == 0 ?
-
1310  mappings[m].pattern : mappings[m].syst_pattern);
-
1311  boost::replace_all(p, "$CHANNEL", bin);
-
1312  boost::replace_all(p, "$PROCESS", process);
-
1313  boost::replace_all(p, "$MASS", mass);
-
1314  if (type == 1) boost::replace_all(p, "$SYSTEMATIC", nuisance+"Down");
-
1315  if (type == 2) boost::replace_all(p, "$SYSTEMATIC", nuisance+"Up");
-
1316  WriteToTFile(hist, file, p);
-
1317  return;
-
1318  }
-
1319  }
-
1320  }
-
1321 }
-
1322 }
-
- -
RooAbsReal const * pdf_d() const
Definition: Systematic.h:54
-
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
-
bool frozen() const
Definition: Parameter.h:51
-
void ForEachProc(Function func)
-
RooAbsReal const * pdf_u() const
Definition: Systematic.h:52
-
bool asymm() const
Definition: Systematic.h:36
-
void ForEachObs(Function func)
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Systematic.cc:251
-
double err_d() const
Definition: Parameter.h:37
+
1018  txt_file << "\n";
+
1019 
+
1020  txt_file << format("%-"+sys_str_long+"s") % "process";
+
1021 
+
1022  // Setup process_ids first
+
1023  std::map<std::string, int> p_ids;
+
1024  unsigned sig_id = 0;
+
1025  unsigned bkg_id = 1;
+
1026  for (unsigned p = 0; p < procs_.size(); ++p) {
+
1027  if (!procs_[p]->signal()) {
+
1028  if (p_ids.count(procs_[p]->process()) == 0) {
+
1029  p_ids[procs_[p]->process()] = bkg_id;
+
1030  ++bkg_id;
+
1031  }
+
1032  else {
+
1033  // check if process was already picked up as signal
+
1034  if (p_ids[procs_[p]->process()] <= 0) throw std::runtime_error(FNERROR("Ambiguous definition of process (" + procs_[p]->process() + ") as both signal and background"));
+
1035  }
+
1036  }
+
1037  unsigned q = procs_.size() - (p + 1);
+
1038  if (procs_[q]->signal()) {
+
1039  if (p_ids.count(procs_[q]->process()) == 0) {
+
1040  p_ids[procs_[q]->process()] = sig_id;
+
1041  --sig_id;
+
1042  }
+
1043  else {
+
1044  // check if process was already picked up as background
+
1045  if (p_ids[procs_[q]->process()] > 0) throw std::runtime_error(FNERROR("Ambiguous definition of process (" + procs_[q]->process() + ") as both signal and background"));
+
1046  }
+
1047  }
+
1048  }
+
1049  for (auto const& proc : procs_) {
+
1050  txt_file << format("%-"+getProcLen(proc)+"s ") % p_ids[proc->process()];
+
1051  }
+
1052  txt_file << "\n";
+
1053 
+
1054 
+
1055  txt_file << format("%-"+sys_str_long+"s") % "rate";
+
1056  for (auto const& proc : procs_) {
+
1057  txt_file << format("%-"+getProcLen(proc)+".6g ") % proc->no_norm_rate();
+
1058  }
+
1059  txt_file << "\n";
+
1060  txt_file << dashes << "\n";
+
1061 
+
1062  // Need to write parameters here that feature both in the list of pdf
+
1063  // dependents and sys_set.
+
1064  for (auto par : params_) {
+
1065  Parameter const* p = par.second.get();
+
1066  if (p->err_d() != 0.0 && p->err_u() != 0.0 &&
+
1067  all_dependents_pars.count(p->name()) && sys_set.count(p->name())) {
+
1068  txt_file << format((format("%%-%is param %%g %%g") % sys_str_len).str()) %
+
1069  p->name() % p->val() % ((p->err_u() - p->err_d()) / 2.0);
+
1070  if (p->range_d() != std::numeric_limits<double>::lowest() &&
+
1071  p->range_u() != std::numeric_limits<double>::max()) {
+
1072  txt_file << format(" [%.4g,%.4g]") % p->range_d() % p->range_u();
+
1073  }
+
1074  txt_file << "\n";
+
1075  }
+
1076  }
+
1077 
+
1078  // Write parameters here that feature in param set but not in the syst set
+
1079  for (auto par : params_) {
+
1080  Parameter const* p = par.second.get();
+
1081  if (p->err_d() != 0.0 && p->err_u() != 0.0 &&
+
1082  param_set.count(p->name()) && !sys_set.count(p->name())) {
+
1083  txt_file << format((format("%%-%is param %%g %%g") % sys_str_len).str()) %
+
1084  p->name() % p->val() % ((p->err_u() - p->err_d()) / 2.0);
+
1085  if (p->range_d() != std::numeric_limits<double>::lowest() &&
+
1086  p->range_u() != std::numeric_limits<double>::max()) {
+
1087  txt_file << format(" [%.4g,%.4g]") % p->range_d() % p->range_u();
+
1088  }
+
1089  txt_file << "\n";
+
1090  }
+
1091  }
+
1092 
+
1093  // Write members of syst collection here that feature in both param set and rateParam set (constraint on rateParam term)
+
1094  for (auto syst : systs_) {
+
1095  if (syst->type() == "param" && param_set.count(syst->name()) && rateparam_set.count(syst->name())) {
+
1096  txt_file << format((format("%%-%is param %%s") % sys_str_len).str()) %
+
1097  syst->name() % syst->param_str_ext();
+
1098  txt_file << "\n";
+
1099  }
+
1100  }
+
1101 
+
1102  for (auto const& sys : sys_set) {
+
1103  std::vector<std::string> line(procs_.size() + 2);
+
1104  line[0] = sys;
+
1105  bool seen_lnN = false;
+
1106  bool seen_lnU = false;
+
1107  bool seen_shape = false;
+
1108  bool seen_shapeN2 = false;
+
1109  bool seen_shapeU = false;
+
1110  if (param_set.count(sys)) continue;
+
1111  for (unsigned p = 0; p < procs_.size(); ++p) {
+
1112  line[p + 2] = "-";
+
1113  for (unsigned n = 0; n < proc_sys_map[p].size(); ++n) {
+
1114  ch::Systematic const* ptr = proc_sys_map[p][n];
+
1115  // Only interested into Systematics with name "sys"
+
1116  if (ptr->name() != sys) continue;
+
1117  std::string tp = ptr->type();
+
1118  if (tp == "lnN" || tp == "lnU") {
+
1119  if (tp == "lnN") seen_lnN = true;
+
1120  if (tp == "lnU") seen_lnU = true;
+
1121  line[p + 2] =
+
1122  ptr->asymm()
+
1123  ? (format("%g/%g") % ptr->value_d() % ptr->value_u()).str()
+
1124  : (format("%g") % ptr->value_u()).str();
+
1125  break;
+
1126  }
+
1127  if (tp == "shape" || tp == "shapeN2" || tp == "shapeU") {
+
1128  if (tp == "shape") seen_shape = true;
+
1129  if (tp == "shapeN2") seen_shapeN2 = true;
+
1130  if (tp == "shapeU") seen_shapeU = true;
+
1131  line[p + 2] = (format("%g") % ptr->scale()).str();
+
1132  if (ptr->shape_u() && ptr->shape_d()) {
+
1133  bool add_dir = TH1::AddDirectoryStatus();
+
1134  TH1::AddDirectory(false);
+
1135  std::unique_ptr<TH1> h_d = ptr->ClonedShapeD();
+
1136  h_d->Scale(procs_[p]->rate() * ptr->value_d());
+
1137  WriteHistToFile(h_d.get(), &root_file, mappings, ptr->bin(),
+
1138  ptr->process(), ptr->mass(), ptr->name(), 1);
+
1139  std::unique_ptr<TH1> h_u = ptr->ClonedShapeU();
+
1140  h_u->Scale(procs_[p]->rate() * ptr->value_u());
+
1141  WriteHistToFile(h_u.get(), &root_file, mappings, ptr->bin(),
+
1142  ptr->process(), ptr->mass(), ptr->name(), 2);
+
1143  TH1::AddDirectory(add_dir);
+
1144  break;
+
1145  } else if ( (ptr->data_u() && ptr->data_d()) || (ptr->pdf_u() && ptr->pdf_d()) ) {
+
1146  } else {
+
1147  if (!flags_.at("allow-missing-shapes")) {
+
1148  std::stringstream err;
+
1149  err << "Trying to write shape uncertainty with missing "
+
1150  "shapes:\n";
+
1151  err << Systematic::PrintHeader << *ptr;
+
1152  throw std::runtime_error(FNERROR(err.str()));
+
1153  }
+
1154  }
+
1155  }
+
1156  }
+
1157  }
+
1158  if (seen_shapeN2) {
+
1159  line[1] = "shapeN2";
+
1160  } else if (seen_shapeU) {
+
1161  line[1] = "shapeU";
+
1162  } else if (seen_lnU) {
+
1163  line[1] = "lnU";
+
1164  } else if (seen_lnN && !seen_shape) {
+
1165  line[1] = "lnN";
+
1166  } else if (!seen_lnN && seen_shape) {
+
1167  line[1] = "shape";
+
1168  } else if (seen_lnN && seen_shape) {
+
1169  line[1] = "shape?";
+
1170  } else {
+
1171  throw std::runtime_error(FNERROR("Systematic type could not be deduced"));
+
1172  }
+
1173  txt_file << format("%-" + sys_str_short + "s %-7s ") % line[0] % line[1];
+
1174  for (unsigned p = 0; p < procs_.size(); ++p) {
+
1175  txt_file << format("%-"+getProcLen(procs_[p])+"s ") % line[p + 2];
+
1176  }
+
1177  txt_file << "\n";
+
1178  }
+
1179  // write param line for any parameter which has a non-zero error
+
1180  // and which doesn't appear in list of nuisances
+
1181  CombineHarvester ch_rp = this->cp().syst_type({"rateParam"});
+
1182  // These are all the processes with a rateParam. We'll look at each one and
+
1183  // see if every bin with this process also has this rateParam.
+
1184  std::vector<std::vector<std::string> > floating_params;
+
1185  for (auto const& sys : rateparam_set) {
+
1186  FNLOGC(log(), verbosity_ > 1) << "Doing rateParam: " << sys << "\n";
+
1187  auto procs_rp = ch_rp.cp().syst_name({sys}).SetFromSysts(
+
1188  std::mem_fn(&ch::Systematic::process));
+
1189  FNLOGC(log(), verbosity_ > 1) << "Procs for this rateParam: \n";
+
1190  for (auto const& proc : procs_rp) {
+
1191  FNLOGC(log(), verbosity_ > 1) << " - " << proc << "\n";
+
1192  // Get the set of bins
+
1193  auto bins_rp = ch_rp.cp().process({proc}).syst_name({sys}).SetFromSysts(
+
1194  std::mem_fn(&ch::Systematic::bin));
+
1195  auto bins_all = this->cp().process({proc}).bin_set();
+
1196  if (bins_rp.size() > 0 && bins_rp.size() == bins_all.size()) {
+
1197  floating_params.push_back({sys, "*", proc});
+
1198  } else {
+
1199  for (auto const& bin : bins_rp) {
+
1200  floating_params.push_back({sys, bin, proc});
+
1201  }
+
1202  }
+
1203  FNLOGC(log(), verbosity_ > 1)
+
1204  << bins_rp.size() << "/" << bins_all.size()
+
1205  << " bins with this process have a rateParam\n";
+
1206  }
+
1207  }
+
1208  std::set<std::string> frozen_params;
+
1209  for (auto const& rp : floating_params) {
+
1210  if (params_.count(rp[0])) {
+
1211  ch::Parameter const* par = params_.at(rp[0]).get();
+
1212  txt_file << format("%-" + sys_str_short + "s %-10s %-10s %-10s %g") %
+
1213  rp[0] % "rateParam" % rp[1] % rp[2] % par->val();
+
1214  // Check if we have to set the range too
+
1215  // TODO: should package this into some function in ch::Parameter
+
1216  if (par->range_d() != std::numeric_limits<double>::lowest() &&
+
1217  par->range_u() != std::numeric_limits<double>::max()) {
+
1218  txt_file << format(" [%.4g,%.4g]") % par->range_d() % par->range_u();
+
1219  }
+
1220  txt_file << "\n";
+
1221  if (par->frozen()) {
+
1222  frozen_params.insert(rp[0]);
+
1223  }
+
1224  }
+
1225  }
+
1226  for (auto const& par : frozen_params) {
+
1227  txt_file << "nuisance edit freeze " << par << "\n";
+
1228  }
+
1229  std::set<std::string> all_fn_param_args;
+
1230  for (auto const& rp : floating_params) {
+
1231  if (!params_.count(rp[0])) {
+
1232  // If we don't have a ch::Parameter with this name, then we'll assume
+
1233  // this is a function
+
1234  RooWorkspace *rp_ws = wspaces_.at("_rateParams").get();
+
1235  RooAbsArg *arg = rp_ws->arg(rp[0].c_str());
+
1236  if (arg->getStringAttribute("wspSource")) {
+
1237  txt_file << format("%-" + sys_str_short +
+
1238  "s %-10s %-10s %-10s %-20s\n") %
+
1239  rp[0] % "rateParam" % rp[1] % rp[2] % std::string(arg->getStringAttribute("wspSource"));
+
1240  continue;
+
1241  }
+
1242  RooFormulaVar* form =
+
1243  dynamic_cast<RooFormulaVar*>(arg);
+
1244  // Want to extract the formula string, apparently "printMetaArgs" is the
+
1245  // only way to do it
+
1246  std::stringstream ss;
+
1247  form->printMetaArgs(ss);
+
1248  std::string form_str = ss.str();
+
1249  // The string will be like 'formula="blah"', strip everything on either
+
1250  // side of the double quotes (including the quotes themselves)
+
1251  std::size_t first = form_str.find_first_of('"');
+
1252  std::size_t last = form_str.find_last_of('"');
+
1253  form_str = form_str.substr(first + 1, last - first - 1);
+
1254  // unique_ptr because we own the RooArgSet that is generated
+
1255  unsigned npars =
+
1256  std::unique_ptr<RooArgSet>(form->getParameters(RooArgList()))->getSize();
+
1257  std::string args = "";
+
1258  for (unsigned i = 0; i < npars; ++i) {
+
1259  all_fn_param_args.insert(std::string(form->getParameter(i)->GetName()));
+
1260  args += std::string(form->getParameter(i)->GetName());
+
1261  if (i < (npars-1)) {
+
1262  args += ",";
+
1263  }
+
1264  }
+
1265  txt_file << format("%-" + sys_str_short +
+
1266  "s %-10s %-10s %-10s %-20s %s\n") %
+
1267  rp[0] % "rateParam" % rp[1] % rp[2] % form_str % args;
+
1268  }
+
1269  }
+
1270 
+
1271  if (wspaces_.count("_rateParams")) {
+
1272  RooWorkspace *rp_ws = wspaces_.at("_rateParams").get();
+
1273  RooArgSet vars = rp_ws->allVars();
+
1274  for (RooAbsArg *v : vars) {
+
1275  RooRealVar *y = dynamic_cast<RooRealVar*>(v);
+
1276  if (y && y->getAttribute("extArg") && all_fn_param_args.count(std::string(y->GetName()))) {
+
1277  if (!params_.count(y->GetName()) && y->getStringAttribute("wspSource")) {
+
1278  std::vector<std::string> tokens;
+
1279  boost::split(tokens, y->getStringAttribute("wspSource"), boost::is_any_of(":"));
+
1280  std::string wsp_name_extArg = tokens[1];
+
1281  y->setStringAttribute("wspSource", (std::string(root_file.GetName()) + ":" + tokens[1]).c_str());
+
1282  txt_file << format("%-" + sys_str_short +
+
1283  "s %-10s %-20s\n") %
+
1284  y->GetName() % "extArg" % std::string(y->getStringAttribute("wspSource"));
+
1285 
+
1286  }
+
1287  else{
+
1288  Parameter const* p = params_.at(y->GetName()).get();
+
1289  txt_file << format("%-" + sys_str_short + "s %-10s %g") %
+
1290  y->GetName() % "extArg" % p->val();
+
1291  if (p->range_d() != std::numeric_limits<double>::lowest() &&
+
1292  p->range_u() != std::numeric_limits<double>::max()) {
+
1293  txt_file << format(" [%.4g,%.4g]") % p->range_d() % p->range_u();
+
1294  }
+
1295  txt_file << "\n";
+
1296  }
+
1297 
+
1298  }
+
1299 
+
1300  }
+
1301  RooArgSet funcs = rp_ws->allFunctions();
+
1302  for (RooAbsArg *v : funcs){
+
1303  RooAbsReal *y = dynamic_cast<RooAbsReal*>(v);
+
1304  if (y && y->getAttribute("extArg") && y->getStringAttribute("wspSource") && all_fn_param_args.count(std::string(y->GetName()))) {
+
1305  txt_file << format("%-" + sys_str_short +
+
1306  "s %-10s %-20s\n") %
+
1307  y->GetName() % "extArg" % std::string(y->getStringAttribute("wspSource"));
+
1308  continue;
+
1309 
+
1310  }
+
1311  }
+
1312  }
+
1313 
+
1314  std::set<std::string> ws_vars;
+
1315  for (auto iter : wspaces_) {
+
1316  RooArgSet vars = iter.second->allVars();
+
1317  for (RooAbsArg *v : vars) {
+
1318  RooRealVar *y = dynamic_cast<RooRealVar*>(v);
+
1319  if (y) ws_vars.insert(y->GetName());
+
1320  }
+
1321  }
+
1322 
+
1323  // How to check for params we need to write:
+
1324  // Get a list of all pdf dependents for the processes we've just written
+
1325  // Also need a list of all Systematic entries we've just written
+
1326  // Then we write param if:
+
1327  // - it has non-zero errors
+
1328  // - it appears in the first list
+
1329  // - it doesn't appear in the second list
+
1330  // - it doesn't appear in the third list
+
1331  for (auto par : params_) {
+
1332  Parameter const* p = par.second.get();
+
1333  if (p->err_d() != 0.0 && p->err_u() != 0.0 &&
+
1334  all_dependents_pars.count(p->name()) && !sys_set.count(p->name()) && !param_set.count(p->name())) {
+
1335  txt_file << format((format("%%-%is param %%g %%g") % sys_str_len).str()) %
+
1336  p->name() % p->val() % ((p->err_u() - p->err_d()) / 2.0);
+
1337  if (p->range_d() != std::numeric_limits<double>::lowest() &&
+
1338  p->range_u() != std::numeric_limits<double>::max()) {
+
1339  txt_file << format(" [%.4g,%.4g]") % p->range_d() % p->range_u();
+
1340  }
+
1341  txt_file << "\n";
+
1342  }
+
1343  }
+
1344 
+
1345  for (auto par : multipdf_cats) {
+
1346  txt_file << format((format("%%-%is discrete\n") % sys_str_len).str()) % par;
+
1347  }
+
1348 
+
1349  for (auto stat_settings : auto_stats_settings_) {
+
1350  if (!bin_set.count(stat_settings.first)) continue;
+
1351  txt_file << format("%s autoMCStats %g %i %i\n") % stat_settings.first %
+
1352  stat_settings.second.event_threshold %
+
1353  stat_settings.second.include_signal %
+
1354  stat_settings.second.hist_mode;
+
1355  }
+
1356 
+
1357  // Finally write the NP groups
+
1358  // We should only consider parameters are either:
+
1359  // - in the list of pdf dependents
+
1360  // - in the list of systematics
+
1361  std::map<std::string, std::set<std::string>> groups;
+
1362  for (auto const& par : params_) {
+
1363  Parameter * p = par.second.get();
+
1364  if (!all_dependents_pars.count(p->name()) && !sys_set.count(p->name())) {
+
1365  continue;
+
1366  }
+
1367  if (p->err_d() == 0.0 && p->err_u() == 0.0) continue;
+
1368  for (auto const& str : p->groups()) {
+
1369  if (!groups.count(str)) {
+
1370  groups[str] = std::set<std::string>();
+
1371  }
+
1372  groups[str].insert(p->name());
+
1373  }
+
1374  }
+
1375  for (auto const& gr : groups) {
+
1376  txt_file << format("%s group =") % gr.first;
+
1377  for (auto const& np : gr.second) {
+
1378  txt_file << " " << np;
+
1379  }
+
1380  txt_file << "\n";
+
1381  }
+
1382 
+
1383  for (auto const& postl : post_lines_) {
+
1384  txt_file << postl << "\n";
+
1385  }
+
1386 }
+
1387 
+
1388 void CombineHarvester::WriteHistToFile(
+
1389  TH1 * hist,
+
1390  TFile * file,
+
1391  std::vector<HistMapping> const& mappings,
+
1392  std::string const& bin,
+
1393  std::string const& process,
+
1394  std::string const& mass,
+
1395  std::string const& nuisance,
+
1396  unsigned type) {
+
1397  StrPairVec attempts = this->GenerateShapeMapAttempts(process, bin);
+
1398  for (unsigned a = 0; a < attempts.size(); ++a) {
+
1399  for (unsigned m = 0; m < mappings.size(); ++m) {
+
1400  if ((attempts[a].first == mappings[m].process) &&
+
1401  (attempts[a].second == mappings[m].category)) {
+
1402  std::string p = (type == 0 ?
+
1403  mappings[m].pattern : mappings[m].syst_pattern);
+
1404  boost::replace_all(p, "$CHANNEL", bin);
+
1405  boost::replace_all(p, "$PROCESS", process);
+
1406  boost::replace_all(p, "$MASS", mass);
+
1407  if (type == 1) boost::replace_all(p, "$SYSTEMATIC", nuisance+"Down");
+
1408  if (type == 2) boost::replace_all(p, "$SYSTEMATIC", nuisance+"Up");
+
1409  WriteToTFile(hist, file, p);
+
1410  return;
+
1411  }
+
1412  }
+
1413  }
+
1414 }
+
1415 }
+ + +
#define FNLOGC(x, y)
Definition: Logging.h:14
+
#define LOGLINE(x, y)
Definition: Logging.h:11
+
#define FNERROR(x)
Definition: Logging.h:9
+
#define FNLOG(x)
Definition: Logging.h:13
+ + -
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
-
bool is_float(std::string const &str)
Definition: Utilities.cc:241
-
RooDataHist const * data_d() const
Definition: Systematic.h:50
-
void set_name(std::string const &name)
Definition: Parameter.h:20
-
std::unique_ptr< TH1 > ClonedShapeU() const
Definition: Systematic.cc:200
+ + -
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
- -
double rate() const
Definition: Observation.h:21
-
void CreateParameterIfEmpty(std::string const &name)
+ +
CombineHarvester & signals()
+
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
+
void CreateParameterIfEmpty(std::string const &name)
+ +
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
void ForEachSyst(Function func)
+
void ForEachProc(Function func)
+
std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
+
void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
+
void WriteDatacard(std::string const &name, std::string const &root_file)
+
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
+
std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
+
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > bin_set()
+
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
+
void ForEachObs(Function func)
+
bool GetFlag(std::string const &flag) 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 & histograms()
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
+
virtual std::string const & process() const
Definition: Object.h:20
virtual std::string const & bin() const
Definition: Object.h:17
- -
#define FNERROR(x)
Definition: Logging.h:9
-
double range_u() const
Definition: Parameter.h:40
-
void WriteToTFile(T *ptr, TFile *file, std::string const &path)
Definition: TFileIO.h:31
-
TH1 const * shape_d() const
Definition: Systematic.h:46
-
double value_u() const
Definition: Systematic.h:27
- -
TH1 const * shape() const
Definition: Process.h:52
-
std::string WorkspaceName() const
Definition: HistMapping.cc:37
+
virtual std::string const & mass() const
Definition: Object.h:38
+ +
TH1 const * shape() const
Definition: Observation.h:27
+
RooAbsData const * data() const
Definition: Observation.h:35
+
double rate() const
Definition: Observation.h:21
+
double err_u() const
Definition: Parameter.h:34
+
bool frozen() const
Definition: Parameter.h:51
+
std::set< std::string > & groups()
Definition: Parameter.h:54
+
void set_err_u(double const &err_u)
Definition: Parameter.h:33
+
void set_err_d(double const &err_d)
Definition: Parameter.h:36
+
double err_d() const
Definition: Parameter.h:37
+
void set_range_u(double const &range_u)
Definition: Parameter.h:39
void set_val(double const &val)
Definition: Parameter.h:23
- -
bool contains(const Range &r, T p)
Definition: Algorithm.h:22
-
double val() const
Definition: Parameter.h:31
- -
#define FNLOGC(x, y)
Definition: Logging.h:14
-
std::set< std::string > bin_set()
-
std::string pattern
Definition: HistMapping.h:13
+
std::string const & name() const
Definition: Parameter.h:21
void set_range_d(double const &range_d)
Definition: Parameter.h:42
- -
double scale() const
Definition: Systematic.h:33
-
std::string process
Definition: HistMapping.h:11
-
RooAbsData const * data() const
Definition: Process.h:63
-
virtual std::string const & mass() const
Definition: Object.h:38
-
std::string category
Definition: HistMapping.h:12
-
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
Definition: Utilities.cc:18
-
CombineHarvester & signals()
-
std::shared_ptr< RooWorkspace > sys_ws
Definition: HistMapping.h:17
- - -
double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
Definition: Process.h:46
double range_d() const
Definition: Parameter.h:43
-
std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
+
double range_u() const
Definition: Parameter.h:40
+
double val() const
Definition: Parameter.h:31
+ +
double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
Definition: Process.h:46
+
RooAbsReal const * pdf() const
Definition: Process.h:60
+
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Process.cc:117
+
RooAbsReal const * norm() const
Definition: Process.h:66
+
RooAbsData const * data() const
Definition: Process.h:63
+
TH1 const * shape() const
Definition: Process.h:52
+ +
double value_u() const
Definition: Systematic.h:28
+
RooDataHist const * data_d() const
Definition: Systematic.h:51
+
std::unique_ptr< TH1 > ClonedShapeU() const
Definition: Systematic.cc:200
+
std::string const & type() const
Definition: Systematic.h:25
+
std::unique_ptr< TH1 > ClonedShapeD() const
Definition: Systematic.cc:207
+
bool asymm() const
Definition: Systematic.h:37
+
TH1 const * shape_d() const
Definition: Systematic.h:47
+
TH1 const * shape_u() const
Definition: Systematic.h:39
+
std::string const & name() const
Definition: Systematic.h:22
+
RooAbsReal const * pdf_d() const
Definition: Systematic.h:55
+
RooAbsReal const * pdf_u() const
Definition: Systematic.h:53
+
RooDataHist const * data_u() const
Definition: Systematic.h:49
+
double value_d() const
Definition: Systematic.h:31
+
double scale() const
Definition: Systematic.h:34
+
static std::ostream & PrintHeader(std::ostream &out)
Definition: Systematic.cc:251
+
Definition: Algorithm.h:10
-
void set_range_u(double const &range_u)
Definition: Parameter.h:39
- -
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
Definition: Utilities.cc:313
-
void set_err_d(double const &err_d)
Definition: Parameter.h:36
-
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
-
CombineHarvester & histograms()
-
double value_d() const
Definition: Systematic.h:30
- -
std::string SystWorkspaceName() const
Definition: HistMapping.cc:53
+
void WriteToTFile(T *ptr, TFile *file, std::string const &path)
Definition: TFileIO.h:31
std::vector< std::string > ParseFileLines(std::string const &file_name)
Definition: Utilities.cc:224
-
std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
- -
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Process.cc:117
-
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 & bin(std::vector< std::string > const &vec, bool cond=true)
-
#define LOGLINE(x, y)
Definition: Logging.h:11
- -
std::set< std::string > & groups()
Definition: Parameter.h:54
-
void ForEachSyst(Function func)
-
std::string const & name() const
Definition: Parameter.h:21
+
boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
Definition: Utilities.cc:313
+
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
+
bool contains(const Range &r, T p)
Definition: Algorithm.h:22
+
bool is_float(std::string const &str)
Definition: Utilities.cc:241
+
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
Definition: Utilities.cc:18
+
std::shared_ptr< TFile > file
Definition: HistMapping.h:15
-
double err_u() const
Definition: Parameter.h:34
-
std::shared_ptr< RooWorkspace > ws
Definition: HistMapping.h:16
-
RooAbsReal const * pdf() const
Definition: Process.h:60
- - -
std::string const & name() const
Definition: Systematic.h:21
-
void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
-
RooAbsData const * data() const
Definition: Observation.h:35
- -
void set_err_u(double const &err_u)
Definition: Parameter.h:33
-
virtual std::string const & process() const
Definition: Object.h:20
-
std::unique_ptr< TH1 > ClonedShapeD() const
Definition: Systematic.cc:207
-
void WriteDatacard(std::string const &name, std::string const &root_file)
-
TH1 const * shape_u() const
Definition: Systematic.h:38
-
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
+
std::string category
Definition: HistMapping.h:12
+
std::string SystWorkspaceName() const
Definition: HistMapping.cc:53
+
std::string pattern
Definition: HistMapping.h:13
+
std::string process
Definition: HistMapping.h:11
std::string syst_pattern
Definition: HistMapping.h:14
-
RooAbsReal const * norm() const
Definition: Process.h:66
-
bool IsPdf() const
Definition: HistMapping.cc:21
+
std::shared_ptr< RooWorkspace > ws
Definition: HistMapping.h:16
+
std::shared_ptr< RooWorkspace > sys_ws
Definition: HistMapping.h:17
-
#define FNLOG(x)
Definition: Logging.h:13
-
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
RooDataHist const * data_u() const
Definition: Systematic.h:48
-
std::string const & type() const
Definition: Systematic.h:24
- -
TH1 const * shape() const
Definition: Observation.h:27
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
std::string WorkspaceName() const
Definition: HistMapping.cc:37
+ + + + + diff --git a/_combine_harvester___evaluate_8cc.html b/_combine_harvester___evaluate_8cc.html index 43ab104c892..e8a12729562 100644 --- a/_combine_harvester___evaluate_8cc.html +++ b/_combine_harvester___evaluate_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester_Evaluate.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_combine_harvester___evaluate_8cc_source.html b/_combine_harvester___evaluate_8cc_source.html index 63bc13b25ff..903f76aaaa4 100644 --- a/_combine_harvester___evaluate_8cc_source.html +++ b/_combine_harvester___evaluate_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester_Evaluate.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -189,7 +186,7 @@
81  std::vector<RooRealVar const*> r_vec(n_pars, nullptr);
82  std::vector<ch::Parameter*> p_vec(n_pars, nullptr);
83  for (unsigned n = 0; n < p_vec.size(); ++n) {
-
84  r_vec[n] = dynamic_cast<RooRealVar const*>(rands.at(n));
+
84  r_vec[n] = dynamic_cast<RooRealVar const*>(rands.at(n));
85  p_vec[n] = GetParameter(r_vec[n]->GetName());
86  }
87 
@@ -242,740 +239,750 @@
134  unsigned n_samples) {
135  auto lookup = GenerateProcSystMap();
136  TH1F shape = GetShapeInternal(lookup);
-
137  for (int i = 1; i <= shape.GetNbinsX(); ++i) {
-
138  shape.SetBinError(i, 0.0);
-
139  }
-
140  // Create a backup copy of the current parameter values
-
141  auto backup = GetParameters();
-
142 
-
143  // Calling randomizePars() ensures that the RooArgList of sampled parameters
-
144  // is already created within the RooFitResult
-
145  RooArgList const& rands = fit.randomizePars();
-
146 
-
147  // Now create two aligned vectors of the RooRealVar parameters and the
-
148  // corresponding ch::Parameter pointers
-
149  int n_pars = rands.getSize();
-
150  std::vector<RooRealVar const*> r_vec(n_pars, nullptr);
-
151  std::vector<ch::Parameter*> p_vec(n_pars, nullptr);
-
152  for (unsigned n = 0; n < p_vec.size(); ++n) {
-
153  r_vec[n] = dynamic_cast<RooRealVar const*>(rands.at(n));
-
154  p_vec[n] = GetParameter(r_vec[n]->GetName());
-
155  }
-
156 
-
157  // Main loop through n_samples
-
158  for (unsigned i = 0; i < n_samples; ++i) {
-
159  // Randomise and update values
-
160  fit.randomizePars();
-
161  for (int n = 0; n < n_pars; ++n) {
-
162  if (p_vec[n]) p_vec[n]->set_val(r_vec[n]->getVal());
-
163  }
-
164 
-
165  TH1F rand_shape = this->GetShapeInternal(lookup);
-
166  for (int i = 1; i <= shape.GetNbinsX(); ++i) {
-
167  double err =
-
168  std::fabs(rand_shape.GetBinContent(i) - shape.GetBinContent(i));
-
169  shape.SetBinError(i, err*err + shape.GetBinError(i));
-
170  }
-
171  }
-
172  for (int i = 1; i <= shape.GetNbinsX(); ++i) {
-
173  shape.SetBinError(i, std::sqrt(shape.GetBinError(i)/double(n_samples)));
-
174  }
-
175  this->UpdateParameters(backup);
-
176  return shape;
-
177 }
-
178 
-
179 TH2F CombineHarvester::GetRateCovariance(RooFitResult const& fit,
-
180  unsigned n_samples) {
-
181  auto lookup = GenerateProcSystMap();
-
182 
-
183  unsigned n = procs_.size();
-
184  TH1F nom("nominal", "nominal", n, 0, n);
-
185  TH2F res("covariance", "covariance", n, 0, n, n, 0, n);
-
186 
-
187  std::vector<CombineHarvester> ch_procs;
-
188  std::vector<std::string> labels;
-
189  unsigned nbins = this->bin_set().size();
-
190 
-
191  for (unsigned i = 0; i < procs_.size(); ++i) {
-
192  ch_procs.push_back(
-
193  this->cp().bin({procs_[i]->bin()}).process({procs_[i]->process()}));
-
194  if (nbins > 1) {
-
195  labels.push_back(procs_[i]->bin() + "," + procs_[i]->process());
-
196  } else {
-
197  labels.push_back(procs_[i]->process());
-
198  }
-
199  }
-
200  for (unsigned i = 0; i < procs_.size(); ++i) {
-
201  nom.SetBinContent(i + 1, ch_procs[i].GetRate());
-
202  }
-
203  auto backup = GetParameters();
-
204 
-
205  // Calling randomizePars() ensures that the RooArgList of sampled parameters
-
206  // is already created within the RooFitResult
-
207  RooArgList const& rands = fit.randomizePars();
-
208 
-
209  // Now create two aligned vectors of the RooRealVar parameters and the
-
210  // corresponding ch::Parameter pointers
-
211  int n_pars = rands.getSize();
-
212  std::vector<RooRealVar const*> r_vec(n_pars, nullptr);
-
213  std::vector<ch::Parameter*> p_vec(n_pars, nullptr);
-
214  for (unsigned n = 0; n < p_vec.size(); ++n) {
-
215  r_vec[n] = dynamic_cast<RooRealVar const*>(rands.at(n));
-
216  p_vec[n] = GetParameter(r_vec[n]->GetName());
-
217  }
+
137  TH1F yield_sum;
+
138  shape.Copy(yield_sum);
+
139  int n_bins = shape.GetNbinsX();
+
140  std::vector<std::vector<float>> sample_yields_perbin(n_bins, std::vector<float>(n_samples));
+
141 
+
142  for (int i = 1; i <= n_bins; ++i) {
+
143  shape.SetBinError(i, 0.0);
+
144  yield_sum.SetBinContent(i, 0.0);
+
145  }
+
146  // Create a backup copy of the current parameter values
+
147  auto backup = GetParameters();
+
148 
+
149  // Calling randomizePars() ensures that the RooArgList of sampled parameters
+
150  // is already created within the RooFitResult
+
151  RooArgList const& rands = fit.randomizePars();
+
152 
+
153  // Now create two aligned vectors of the RooRealVar parameters and the
+
154  // corresponding ch::Parameter pointers
+
155  int n_pars = rands.getSize();
+
156  std::vector<RooRealVar const*> r_vec(n_pars, nullptr);
+
157  std::vector<ch::Parameter*> p_vec(n_pars, nullptr);
+
158  for (unsigned n = 0; n < p_vec.size(); ++n) {
+
159  r_vec[n] = dynamic_cast<RooRealVar const*>(rands.at(n));
+
160  p_vec[n] = GetParameter(r_vec[n]->GetName());
+
161  }
+
162 
+
163  // Main loop through n_samples
+
164  for (unsigned i = 0; i < n_samples; ++i) {
+
165  // Randomise and update values
+
166  fit.randomizePars();
+
167  for (int n = 0; n < n_pars; ++n) {
+
168  if (p_vec[n]) p_vec[n]->set_val(r_vec[n]->getVal());
+
169  }
+
170  TH1F rand_shape = this->GetShapeInternal(lookup);
+
171  for (int j = 1; j <= n_bins; ++j) {
+
172  double yield = rand_shape.GetBinContent(j);
+
173  sample_yields_perbin[j-1][i] = yield;
+
174  yield_sum.SetBinContent(j, yield_sum.GetBinContent(j) + yield);
+
175  }
+
176  }
+
177  for (int i = 1; i <= n_bins; ++i) {
+
178  double yield_mean = yield_sum.GetBinContent(i)/double(n_samples);
+
179  for (auto x :sample_yields_perbin[i-1]){
+
180  double err = std::fabs(x - yield_mean);
+
181  shape.SetBinError(i, err*err + shape.GetBinError(i));
+
182  }
+
183  shape.SetBinError(i, std::sqrt(shape.GetBinError(i)/double(n_samples)));
+
184  }
+
185  this->UpdateParameters(backup);
+
186  return shape;
+
187 }
+
188 
+
189 TH2F CombineHarvester::GetRateCovariance(RooFitResult const& fit,
+
190  unsigned n_samples) {
+
191  auto lookup = GenerateProcSystMap();
+
192 
+
193  unsigned n = procs_.size();
+
194  TH1F nom("nominal", "nominal", n, 0, n);
+
195  TH2F res("covariance", "covariance", n, 0, n, n, 0, n);
+
196 
+
197  std::vector<CombineHarvester> ch_procs;
+
198  std::vector<std::string> labels;
+
199  unsigned nbins = this->bin_set().size();
+
200 
+
201  for (unsigned i = 0; i < procs_.size(); ++i) {
+
202  ch_procs.push_back(
+
203  this->cp().bin({procs_[i]->bin()}).process({procs_[i]->process()}));
+
204  if (nbins > 1) {
+
205  labels.push_back(procs_[i]->bin() + "," + procs_[i]->process());
+
206  } else {
+
207  labels.push_back(procs_[i]->process());
+
208  }
+
209  }
+
210  for (unsigned i = 0; i < procs_.size(); ++i) {
+
211  nom.SetBinContent(i + 1, ch_procs[i].GetRate());
+
212  }
+
213  auto backup = GetParameters();
+
214 
+
215  // Calling randomizePars() ensures that the RooArgList of sampled parameters
+
216  // is already created within the RooFitResult
+
217  RooArgList const& rands = fit.randomizePars();
218 
-
219  // Main loop through n_samples
-
220  for (unsigned rnd = 0; rnd < n_samples; ++rnd) {
-
221  // Randomise and update values
-
222  fit.randomizePars();
-
223  for (int n = 0; n < n_pars; ++n) {
-
224  if (p_vec[n]) p_vec[n]->set_val(r_vec[n]->getVal());
-
225  }
-
226 
-
227  for (int i = 1; i <= nom.GetNbinsX(); ++i) {
-
228  for (int j = 1; j <= nom.GetNbinsX(); ++j) {
-
229  int x = j;
-
230  int y = nom.GetNbinsX() - (i - 1);
-
231  res.GetXaxis()->SetBinLabel(x, labels[j - 1].c_str());
-
232  res.GetYaxis()->SetBinLabel(y, labels[i - 1].c_str());
-
233  res.SetBinContent(
-
234  x, y, res.GetBinContent(x, y) +
-
235  (ch_procs[i - 1].GetRate() - nom.GetBinContent(i)) *
-
236  (ch_procs[j - 1].GetRate() - nom.GetBinContent(j)));
-
237  }
-
238  }
-
239  }
-
240 
-
241  for (int i = 1; i <= nom.GetNbinsX(); ++i) {
-
242  for (int j = 1; j <= nom.GetNbinsX(); ++j) {
-
243  int x = j;
-
244  int y = nom.GetNbinsX() - (i - 1);
-
245  res.SetBinContent(x, y, res.GetBinContent(x, y) / double(n_samples));
-
246  }
-
247  }
-
248  this->UpdateParameters(backup);
-
249  return res;
-
250 }
-
251 
-
252 TH2F CombineHarvester::GetRateCorrelation(RooFitResult const& fit,
-
253  unsigned n_samples) {
-
254  TH2F cov = GetRateCovariance(fit, n_samples);
-
255  TH2F res = cov;
-
256  res.SetName("correlation");
-
257  res.SetTitle("correlation");
-
258  for (int i = 1; i <= cov.GetNbinsX(); ++i) {
-
259  for (int j = 1; j <= cov.GetNbinsX(); ++j) {
-
260  int x = j;
-
261  int y = cov.GetNbinsX() - (i - 1);
-
262  res.SetBinContent(
-
263  x, y,
-
264  cov.GetBinContent(x, y) /
-
265  (std::sqrt(cov.GetBinContent(i, cov.GetNbinsX() - (i - 1))) *
-
266  std::sqrt(cov.GetBinContent(j, cov.GetNbinsX() - (j - 1)))));
-
267  }
-
268  }
-
269  return res;
-
270 }
-
271 
- -
273  auto lookup = GenerateProcSystMap();
-
274  return GetRateInternal(lookup);
-
275 }
-
276 
- -
278  auto lookup = GenerateProcSystMap();
-
279  return GetShapeInternal(lookup);
+
219  // Now create two aligned vectors of the RooRealVar parameters and the
+
220  // corresponding ch::Parameter pointers
+
221  int n_pars = rands.getSize();
+
222  std::vector<RooRealVar const*> r_vec(n_pars, nullptr);
+
223  std::vector<ch::Parameter*> p_vec(n_pars, nullptr);
+
224  for (unsigned n = 0; n < p_vec.size(); ++n) {
+
225  r_vec[n] = dynamic_cast<RooRealVar const*>(rands.at(n));
+
226  p_vec[n] = GetParameter(r_vec[n]->GetName());
+
227  }
+
228 
+
229  // Main loop through n_samples
+
230  for (unsigned rnd = 0; rnd < n_samples; ++rnd) {
+
231  // Randomise and update values
+
232  fit.randomizePars();
+
233  for (int n = 0; n < n_pars; ++n) {
+
234  if (p_vec[n]) p_vec[n]->set_val(r_vec[n]->getVal());
+
235  }
+
236 
+
237  for (int i = 1; i <= nom.GetNbinsX(); ++i) {
+
238  for (int j = 1; j <= nom.GetNbinsX(); ++j) {
+
239  int x = j;
+
240  int y = nom.GetNbinsX() - (i - 1);
+
241  res.GetXaxis()->SetBinLabel(x, labels[j - 1].c_str());
+
242  res.GetYaxis()->SetBinLabel(y, labels[i - 1].c_str());
+
243  res.SetBinContent(
+
244  x, y, res.GetBinContent(x, y) +
+
245  (ch_procs[i - 1].GetRate() - nom.GetBinContent(i)) *
+
246  (ch_procs[j - 1].GetRate() - nom.GetBinContent(j)));
+
247  }
+
248  }
+
249  }
+
250 
+
251  for (int i = 1; i <= nom.GetNbinsX(); ++i) {
+
252  for (int j = 1; j <= nom.GetNbinsX(); ++j) {
+
253  int x = j;
+
254  int y = nom.GetNbinsX() - (i - 1);
+
255  res.SetBinContent(x, y, res.GetBinContent(x, y) / double(n_samples));
+
256  }
+
257  }
+
258  this->UpdateParameters(backup);
+
259  return res;
+
260 }
+
261 
+
262 TH2F CombineHarvester::GetRateCorrelation(RooFitResult const& fit,
+
263  unsigned n_samples) {
+
264  TH2F cov = GetRateCovariance(fit, n_samples);
+
265  TH2F res = cov;
+
266  res.SetName("correlation");
+
267  res.SetTitle("correlation");
+
268  for (int i = 1; i <= cov.GetNbinsX(); ++i) {
+
269  for (int j = 1; j <= cov.GetNbinsX(); ++j) {
+
270  int x = j;
+
271  int y = cov.GetNbinsX() - (i - 1);
+
272  res.SetBinContent(
+
273  x, y,
+
274  cov.GetBinContent(x, y) /
+
275  (std::sqrt(cov.GetBinContent(i, cov.GetNbinsX() - (i - 1))) *
+
276  std::sqrt(cov.GetBinContent(j, cov.GetNbinsX() - (j - 1)))));
+
277  }
+
278  }
+
279  return res;
280 }
281 
-
282 double CombineHarvester::GetRateInternal(ProcSystMap const& lookup,
-
283  std::string const& single_sys) {
-
284  double rate = 0.0;
-
285  // TH1F tot_shape
-
286  for (unsigned i = 0; i < procs_.size(); ++i) {
-
287  double p_rate = procs_[i]->rate();
-
288  // If we are evaluating the effect of a single parameter
-
289  // check the list of associated nuisances and skip if
-
290  // this "single_sys" is not in the list
-
291  // However - we can't skip if the process has a pdf, as
-
292  // we haven't checked what the parameters are
-
293  if (single_sys != "" && !procs_[i]->pdf()) {
-
294  if (!ch::any_of(lookup[i], [&](Systematic const* sys) {
-
295  return sys->name() == single_sys;
-
296  })) continue;
-
297  }
-
298  for (auto sys_it : lookup[i]) {
-
299  if (sys_it->type() == "rateParam") {
-
300  continue; // don't evaluate this for now
-
301  }
-
302  double x = params_[sys_it->name()]->val();
-
303  if (sys_it->asymm()) {
-
304  p_rate *= logKappaForX(x * sys_it->scale(), sys_it->value_d(),
-
305  sys_it->value_u());
-
306  } else {
-
307  p_rate *= std::pow(sys_it->value_u(), x * sys_it->scale());
-
308  }
-
309  }
-
310  rate += p_rate;
-
311  }
-
312  return rate;
-
313 }
-
314 
-
315 TH1F CombineHarvester::GetShapeInternal(ProcSystMap const& lookup,
-
316  std::string const& single_sys) {
-
317  TH1F shape;
-
318  bool shape_init = false;
-
319 
-
320  for (unsigned i = 0; i < procs_.size(); ++i) {
-
321  // Might be able to skip if only interested in one nuisance
-
322  // However - we can't skip if the process has a pdf, as
-
323  // we haven't checked what the parameters are
-
324  if (single_sys != "" && !procs_[i]->pdf()) {
-
325  if (!ch::any_of(lookup[i], [&](Systematic const* sys) {
-
326  return sys->name() == single_sys;
-
327  })) continue;
-
328  }
+ +
283  auto lookup = GenerateProcSystMap();
+
284  return GetRateInternal(lookup);
+
285 }
+
286 
+ +
288  auto lookup = GenerateProcSystMap();
+
289  return GetShapeInternal(lookup);
+
290 }
+
291 
+
292 double CombineHarvester::GetRateInternal(ProcSystMap const& lookup,
+
293  std::string const& single_sys) {
+
294  double rate = 0.0;
+
295  // TH1F tot_shape
+
296  for (unsigned i = 0; i < procs_.size(); ++i) {
+
297  double p_rate = procs_[i]->rate();
+
298  // If we are evaluating the effect of a single parameter
+
299  // check the list of associated nuisances and skip if
+
300  // this "single_sys" is not in the list
+
301  // However - we can't skip if the process has a pdf, as
+
302  // we haven't checked what the parameters are
+
303  if (single_sys != "" && !procs_[i]->pdf()) {
+
304  if (!ch::any_of(lookup[i], [&](Systematic const* sys) {
+
305  return sys->name() == single_sys;
+
306  })) continue;
+
307  }
+
308  for (auto sys_it : lookup[i]) {
+
309  if (sys_it->type() == "rateParam") {
+
310  continue; // don't evaluate this for now
+
311  }
+
312  double x = params_[sys_it->name()]->val();
+
313  if (sys_it->asymm()) {
+
314  p_rate *= logKappaForX(x * sys_it->scale(), sys_it->value_d(),
+
315  sys_it->value_u());
+
316  } else {
+
317  p_rate *= std::pow(sys_it->value_u(), x * sys_it->scale());
+
318  }
+
319  }
+
320  rate += p_rate;
+
321  }
+
322  return rate;
+
323 }
+
324 
+
325 TH1F CombineHarvester::GetShapeInternal(ProcSystMap const& lookup,
+
326  std::string const& single_sys) {
+
327  TH1F shape;
+
328  bool shape_init = false;
329 
-
330  double p_rate = procs_[i]->rate();
-
331  if (procs_[i]->shape() || procs_[i]->data()) {
-
332  TH1F proc_shape = procs_[i]->ShapeAsTH1F();
-
333  for (auto sys_it : lookup[i]) {
-
334  if (sys_it->type() == "rateParam") {
-
335  continue; // don't evaluate this for now
-
336  }
-
337  auto param_it = params_.find(sys_it->name());
-
338  if (param_it == params_.end()) {
-
339  throw std::runtime_error(
-
340  FNERROR("Parameter " + sys_it->name() +
-
341  " not found in CombineHarvester instance"));
-
342  }
-
343  double x = param_it->second->val();
-
344  if (sys_it->asymm()) {
-
345  p_rate *= logKappaForX(x * sys_it->scale(), sys_it->value_d(),
-
346  sys_it->value_u());
-
347  if (sys_it->type() == "shape" || sys_it->type() == "shapeN2" ||
-
348  sys_it->type() == "shapeU") {
-
349  bool linear = true;
-
350  if (sys_it->type() == "shapeN2") linear = false;
-
351  if (sys_it->shape_u() && sys_it->shape_d()) {
-
352  ShapeDiff(x * sys_it->scale(), &proc_shape, procs_[i]->shape(),
-
353  sys_it->shape_d(), sys_it->shape_u(), linear);
-
354  }
-
355  if (sys_it->data_u() && sys_it->data_d()) {
-
356  RooDataHist const* nom =
-
357  dynamic_cast<RooDataHist const*>(procs_[i]->data());
-
358  if (nom) {
-
359  ShapeDiff(x * sys_it->scale(), &proc_shape, nom,
-
360  sys_it->data_d(), sys_it->data_u());
-
361  }
-
362  }
-
363  }
-
364  } else {
-
365  p_rate *= std::pow(sys_it->value_u(), x * sys_it->scale());
-
366  }
-
367  }
-
368  for (int b = 1; b <= proc_shape.GetNbinsX(); ++b) {
-
369  if (proc_shape.GetBinContent(b) < 0.) proc_shape.SetBinContent(b, 0.);
-
370  }
-
371  proc_shape.Scale(p_rate);
-
372  if (!shape_init) {
-
373  proc_shape.Copy(shape);
-
374  shape.Reset();
-
375  shape_init = true;
-
376  }
-
377  shape.Add(&proc_shape);
-
378  } else if (procs_[i]->pdf()) {
-
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()));
-
384  }
-
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());
-
390  }
-
391  TH1F proc_shape = *tmp;
-
392  delete tmp;
-
393  RooAbsPdf const* aspdf = dynamic_cast<RooAbsPdf const*>(procs_[i]->pdf());
-
394  if ((aspdf && !aspdf->selfNormalized()) || (!aspdf)) {
-
395  // LOGLINE(log(), "Have a pdf that is not selfNormalized");
-
396  // std::cout << "Integral: " << proc_shape.Integral() << "\n";
-
397  if (proc_shape.Integral() > 0.) {
-
398  proc_shape.Scale(1. / proc_shape.Integral());
-
399  }
+
330  for (unsigned i = 0; i < procs_.size(); ++i) {
+
331  // Might be able to skip if only interested in one nuisance
+
332  // However - we can't skip if the process has a pdf, as
+
333  // we haven't checked what the parameters are
+
334  if (single_sys != "" && !procs_[i]->pdf()) {
+
335  if (!ch::any_of(lookup[i], [&](Systematic const* sys) {
+
336  return sys->name() == single_sys;
+
337  })) continue;
+
338  }
+
339 
+
340  double p_rate = procs_[i]->rate();
+
341  if (procs_[i]->shape() || procs_[i]->data()) {
+
342  TH1F proc_shape = procs_[i]->ShapeAsTH1F();
+
343  for (auto sys_it : lookup[i]) {
+
344  if (sys_it->type() == "rateParam") {
+
345  continue; // don't evaluate this for now
+
346  }
+
347  auto param_it = params_.find(sys_it->name());
+
348  if (param_it == params_.end()) {
+
349  throw std::runtime_error(
+
350  FNERROR("Parameter " + sys_it->name() +
+
351  " not found in CombineHarvester instance"));
+
352  }
+
353  double x = param_it->second->val();
+
354  if (sys_it->asymm()) {
+
355  p_rate *= logKappaForX(x * sys_it->scale(), sys_it->value_d(),
+
356  sys_it->value_u());
+
357  if (sys_it->type() == "shape" || sys_it->type() == "shapeN2" ||
+
358  sys_it->type() == "shapeU") {
+
359  bool linear = true;
+
360  if (sys_it->type() == "shapeN2") linear = false;
+
361  if (sys_it->shape_u() && sys_it->shape_d()) {
+
362  ShapeDiff(x * sys_it->scale(), &proc_shape, procs_[i]->shape(),
+
363  sys_it->shape_d(), sys_it->shape_u(), linear);
+
364  }
+
365  if (sys_it->data_u() && sys_it->data_d()) {
+
366  RooDataHist const* nom =
+
367  dynamic_cast<RooDataHist const*>(procs_[i]->data());
+
368  if (nom) {
+
369  ShapeDiff(x * sys_it->scale(), &proc_shape, nom,
+
370  sys_it->data_d(), sys_it->data_u());
+
371  }
+
372  }
+
373  }
+
374  } else {
+
375  p_rate *= std::pow(sys_it->value_u(), x * sys_it->scale());
+
376  }
+
377  }
+
378  for (int b = 1; b <= proc_shape.GetNbinsX(); ++b) {
+
379  if (proc_shape.GetBinContent(b) < 0.) proc_shape.SetBinContent(b, 0.);
+
380  }
+
381  proc_shape.Scale(p_rate);
+
382  if (!shape_init) {
+
383  proc_shape.Copy(shape);
+
384  shape.Reset();
+
385  shape_init = true;
+
386  }
+
387  shape.Add(&proc_shape);
+
388  } else if (procs_[i]->pdf()) {
+
389  if (!procs_[i]->observable()) {
+
390  RooAbsData const* data_obj = FindMatchingData(procs_[i].get());
+
391  std::string var_name = "CMS_th1x";
+
392  if (data_obj) var_name = data_obj->get()->first()->GetName();
+
393  procs_[i]->set_observable((RooRealVar *)procs_[i]->pdf()->findServer(var_name.c_str()));
+
394  }
+
395  TH1::AddDirectory(false);
+
396  TH1F* tmp = (TH1F*)procs_[i]->observable()->createHistogram("");
+
397  for (int b = 1; b <= tmp->GetNbinsX(); ++b) {
+
398  procs_[i]->observable()->setVal(tmp->GetBinCenter(b));
+
399  tmp->SetBinContent(b, tmp->GetBinWidth(b) * procs_[i]->pdf()->getVal());
400  }
-
401  for (auto sys_it : lookup[i]) {
-
402  if (sys_it->type() == "rateParam") {
-
403  continue; // don't evaluate this for now
-
404  }
-
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(),
-
408  sys_it->value_u());
-
409  } else {
-
410  p_rate *= std::pow(sys_it->value_u(), x * sys_it->scale());
-
411  }
-
412  }
-
413  proc_shape.Scale(p_rate);
-
414  if (!shape_init) {
-
415  proc_shape.Copy(shape);
-
416  shape.Reset();
-
417  shape_init = true;
-
418  }
-
419  shape.Add(&proc_shape);
-
420  }
-
421  }
-
422  return shape;
-
423 }
-
424 
- -
426  double rate = 0.0;
-
427  for (unsigned i = 0; i < obs_.size(); ++i) {
-
428  rate += obs_[i]->rate();
-
429  }
-
430  return rate;
-
431 }
-
432 
- -
434  TH1F shape;
-
435  bool shape_init = false;
-
436 
+
401  TH1F proc_shape = *tmp;
+
402  delete tmp;
+
403  RooAbsPdf const* aspdf = dynamic_cast<RooAbsPdf const*>(procs_[i]->pdf());
+
404  if ((aspdf && !aspdf->selfNormalized()) || (!aspdf)) {
+
405  // LOGLINE(log(), "Have a pdf that is not selfNormalized");
+
406  // std::cout << "Integral: " << proc_shape.Integral() << "\n";
+
407  if (proc_shape.Integral() > 0.) {
+
408  proc_shape.Scale(1. / proc_shape.Integral());
+
409  }
+
410  }
+
411  for (auto sys_it : lookup[i]) {
+
412  if (sys_it->type() == "rateParam") {
+
413  continue; // don't evaluate this for now
+
414  }
+
415  double x = params_[sys_it->name()]->val();
+
416  if (sys_it->asymm()) {
+
417  p_rate *= logKappaForX(x * sys_it->scale(), sys_it->value_d(),
+
418  sys_it->value_u());
+
419  } else {
+
420  p_rate *= std::pow(sys_it->value_u(), x * sys_it->scale());
+
421  }
+
422  }
+
423  proc_shape.Scale(p_rate);
+
424  if (!shape_init) {
+
425  proc_shape.Copy(shape);
+
426  shape.Reset();
+
427  shape_init = true;
+
428  }
+
429  shape.Add(&proc_shape);
+
430  }
+
431  }
+
432  return shape;
+
433 }
+
434 
+ +
436  double rate = 0.0;
437  for (unsigned i = 0; i < obs_.size(); ++i) {
-
438  TH1F proc_shape;
-
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()));
-
445  tmp->Sumw2(false);
-
446  tmp->SetBinErrorOption(TH1::kPoisson);
-
447  proc_shape = *tmp;
-
448  delete tmp;
-
449  proc_shape.Scale(1. / proc_shape.Integral());
-
450  }
-
451  proc_shape.Scale(p_rate);
-
452  if (!shape_init) {
-
453  proc_shape.Copy(shape);
-
454  shape.Reset();
-
455  shape_init = true;
-
456  }
-
457  shape.Add(&proc_shape);
-
458  }
-
459  return shape;
-
460 }
-
461 
-
462 void CombineHarvester::ShapeDiff(double x,
-
463  TH1F * target,
-
464  TH1 const* nom,
-
465  TH1 const* low,
-
466  TH1 const* high,
-
467  bool linear) {
-
468  double fx = smoothStepFunc(x);
-
469  for (int i = 1; i <= target->GetNbinsX(); ++i) {
-
470  float h = high->GetBinContent(i);
-
471  float l = low->GetBinContent(i);
-
472  float n = nom->GetBinContent(i);
-
473  if (!linear) {
-
474  float t = target->GetBinContent(i);
-
475  target->SetBinContent(i, t > 0. ? std::log(t) : -999.);
-
476  h = (h > 0. && n > 0.) ? std::log(h/n) : 0.;
-
477  l = (l > 0. && n > 0.) ? std::log(l/n) : 0.;
-
478  target->SetBinContent(i, target->GetBinContent(i) +
-
479  0.5 * x * ((h - l) + (h + l) * fx));
-
480  target->SetBinContent(i, std::exp(target->GetBinContent(i)));
-
481  } else {
-
482  target->SetBinContent(i, target->GetBinContent(i) +
-
483  0.5 * x * ((h - l) + (h + l - 2. * n) * fx));
-
484  }
-
485  }
-
486 }
-
487 
-
488 void CombineHarvester::ShapeDiff(double x,
-
489  TH1F * target,
-
490  RooDataHist const* nom,
-
491  RooDataHist const* low,
-
492  RooDataHist const* high) {
-
493  double fx = smoothStepFunc(x);
-
494  for (int i = 1; i <= target->GetNbinsX(); ++i) {
-
495  high->get(i-1);
-
496  low->get(i-1);
-
497  nom->get(i-1);
-
498  // The RooDataHists are not scaled to unity (unlike in the TH1 case above)
-
499  // so we have to normalise the bin contents on the fly
-
500  float h = high->weight() / high->sumEntries();
-
501  float l = low->weight() / low->sumEntries();
-
502  float n = nom->weight() / nom->sumEntries();
-
503  target->SetBinContent(i, target->GetBinContent(i) +
-
504  0.5 * x * ((h - l) + (h + l - 2. * n) * fx));
-
505  }
-
506 }
-
507 
-
508 // void CombineHarvester::SetParameters(std::vector<ch::Parameter> params) {
-
509 // params_.clear();
-
510 // for (unsigned i = 0; i < params.size(); ++i) {
-
511 // params_[params[i].name()] = std::make_shared<ch::Parameter>(params[i]);
-
512 // }
-
513 // }
-
514 
-
515 void CombineHarvester::RenameParameter(std::string const& oldname,
-
516  std::string const& newname) {
-
517  auto it = params_.find(oldname);
-
518  if (it != params_.end()) {
-
519  params_[newname] = it->second;
-
520  params_[newname]->set_name(newname);
-
521  params_.erase(it);
-
522  }
-
523 }
+
438  rate += obs_[i]->rate();
+
439  }
+
440  return rate;
+
441 }
+
442 
+ +
444  TH1F shape;
+
445  bool shape_init = false;
+
446 
+
447  for (unsigned i = 0; i < obs_.size(); ++i) {
+
448  TH1F proc_shape;
+
449  double p_rate = obs_[i]->rate();
+
450  if (obs_[i]->shape()) {
+
451  proc_shape = obs_[i]->ShapeAsTH1F();
+
452  } else if (obs_[i]->data()) {
+
453  TH1F* tmp = dynamic_cast<TH1F*>(obs_[i]->data()->createHistogram(
+
454  "", *(RooRealVar*)obs_[i]->data()->get()->first()));
+
455  tmp->Sumw2(false);
+
456  tmp->SetBinErrorOption(TH1::kPoisson);
+
457  proc_shape = *tmp;
+
458  delete tmp;
+
459  proc_shape.Scale(1. / proc_shape.Integral());
+
460  }
+
461  proc_shape.Scale(p_rate);
+
462  if (!shape_init) {
+
463  proc_shape.Copy(shape);
+
464  shape.Reset();
+
465  shape_init = true;
+
466  }
+
467  shape.Add(&proc_shape);
+
468  }
+
469  return shape;
+
470 }
+
471 
+
472 void CombineHarvester::ShapeDiff(double x,
+
473  TH1F * target,
+
474  TH1 const* nom,
+
475  TH1 const* low,
+
476  TH1 const* high,
+
477  bool linear) {
+
478  double fx = smoothStepFunc(x);
+
479  for (int i = 1; i <= target->GetNbinsX(); ++i) {
+
480  float h = high->GetBinContent(i);
+
481  float l = low->GetBinContent(i);
+
482  float n = nom->GetBinContent(i);
+
483  if (!linear) {
+
484  float t = target->GetBinContent(i);
+
485  target->SetBinContent(i, t > 0. ? std::log(t) : -999.);
+
486  h = (h > 0. && n > 0.) ? std::log(h/n) : 0.;
+
487  l = (l > 0. && n > 0.) ? std::log(l/n) : 0.;
+
488  target->SetBinContent(i, target->GetBinContent(i) +
+
489  0.5 * x * ((h - l) + (h + l) * fx));
+
490  target->SetBinContent(i, std::exp(target->GetBinContent(i)));
+
491  } else {
+
492  target->SetBinContent(i, target->GetBinContent(i) +
+
493  0.5 * x * ((h - l) + (h + l - 2. * n) * fx));
+
494  }
+
495  }
+
496 }
+
497 
+
498 void CombineHarvester::ShapeDiff(double x,
+
499  TH1F * target,
+
500  RooDataHist const* nom,
+
501  RooDataHist const* low,
+
502  RooDataHist const* high) {
+
503  double fx = smoothStepFunc(x);
+
504  for (int i = 1; i <= target->GetNbinsX(); ++i) {
+
505  high->get(i-1);
+
506  low->get(i-1);
+
507  nom->get(i-1);
+
508  // The RooDataHists are not scaled to unity (unlike in the TH1 case above)
+
509  // so we have to normalise the bin contents on the fly
+
510  float h = high->weight() / high->sumEntries();
+
511  float l = low->weight() / low->sumEntries();
+
512  float n = nom->weight() / nom->sumEntries();
+
513  target->SetBinContent(i, target->GetBinContent(i) +
+
514  0.5 * x * ((h - l) + (h + l - 2. * n) * fx));
+
515  }
+
516 }
+
517 
+
518 // void CombineHarvester::SetParameters(std::vector<ch::Parameter> params) {
+
519 // params_.clear();
+
520 // for (unsigned i = 0; i < params.size(); ++i) {
+
521 // params_[params[i].name()] = std::make_shared<ch::Parameter>(params[i]);
+
522 // }
+
523 // }
524 
- -
526  std::string const& name) const {
-
527  auto it = params_.find(name);
+
525 void CombineHarvester::RenameParameter(std::string const& oldname,
+
526  std::string const& newname) {
+
527  auto it = params_.find(oldname);
528  if (it != params_.end()) {
-
529  return it->second.get();
-
530  } else {
-
531  return nullptr;
+
529  params_[newname] = it->second;
+
530  params_[newname]->set_name(newname);
+
531  params_.erase(it);
532  }
533 }
534 
- -
536  auto it = params_.find(name);
-
537  if (it != params_.end()) {
-
538  return it->second.get();
-
539  } else {
-
540  return nullptr;
-
541  }
-
542 }
-
543 
- -
545  std::vector<ch::Parameter> const& params) {
-
546  for (unsigned i = 0; i < params.size(); ++i) {
-
547  auto it = params_.find(params[i].name());
-
548  if (it != params_.end()) {
-
549  it->second->set_val(params[i].val());
-
550  it->second->set_err_d(params[i].err_d());
-
551  it->second->set_err_u(params[i].err_u());
-
552  } else {
-
553  if (verbosity_ >= 1) {
-
554  LOGLINE(log(), "Parameter " + params[i].name() + " is not defined");
-
555  }
-
556  }
-
557  }
-
558 }
-
559 
-
560 void CombineHarvester::UpdateParameters(RooFitResult const& fit) {
-
561  for (int i = 0; i < fit.floatParsFinal().getSize(); ++i) {
-
562  RooRealVar const* var =
-
563  dynamic_cast<RooRealVar const*>(fit.floatParsFinal().at(i));
-
564  // check for failed cast here
-
565  auto it = params_.find(std::string(var->GetName()));
-
566  if (it != params_.end()) {
-
567  it->second->set_val(var->getVal());
-
568  it->second->set_err_d(var->getErrorLo());
-
569  it->second->set_err_u(var->getErrorHi());
-
570  } else {
-
571  if (verbosity_ >= 1) {
-
572  LOGLINE(log(),
-
573  "Parameter " + std::string(var->GetName()) + " is not defined");
-
574  }
-
575  }
-
576  }
-
577 }
-
578 
-
579 void CombineHarvester::UpdateParameters(RooFitResult const* fit) {
-
580  UpdateParameters(*fit);
-
581 }
-
582 
-
583 std::vector<ch::Parameter> CombineHarvester::GetParameters() const {
-
584  std::vector<ch::Parameter> params;
-
585  for (auto const& it : params_) {
-
586  params.push_back(*(it.second));
-
587  }
-
588  return params;
-
589 }
-
590 
-
591 void CombineHarvester::VariableRebin(std::vector<double> bins) {
-
592  // We need to keep a record of the Process rates before we rebin. The
-
593  // reasoning comes from the following scenario: the user might choose a new
-
594  // binning which excludes some of the existing bins - thus changing the
-
595  // process normalisation. This is fine, but we also need to adjust the shape
-
596  // Systematic entries - both the rebinning and the adjustment of the value_u
-
597  // and value_d shifts.
-
598  std::vector<double> prev_proc_rates(procs_.size());
-
599 
-
600  // Also hold on the scaled Process hists *after* the rebinning is done - these
-
601  // are needed to update the associated Systematic entries
-
602  std::vector<std::unique_ptr<TH1>> scaled_procs(procs_.size());
-
603 
-
604  for (unsigned i = 0; i < procs_.size(); ++i) {
-
605  if (procs_[i]->shape()) {
-
606  // Get the scaled shape here
-
607  std::unique_ptr<TH1> copy(procs_[i]->ClonedScaledShape());
-
608  // shape norm should only be "no_norm_rate"
-
609  prev_proc_rates[i] = procs_[i]->no_norm_rate();
-
610  std::unique_ptr<TH1> copy2(copy->Rebin(bins.size()-1, "", &(bins[0])));
-
611  // The process shape & rate will be reset here
-
612  procs_[i]->set_shape(std::move(copy2), true);
-
613  scaled_procs[i] = procs_[i]->ClonedScaledShape();
-
614  }
-
615  }
-
616  for (unsigned i = 0; i < obs_.size(); ++i) {
-
617  if (obs_[i]->shape()) {
-
618  std::unique_ptr<TH1> copy(obs_[i]->ClonedScaledShape());
-
619  std::unique_ptr<TH1> copy2(copy->Rebin(bins.size()-1, "", &(bins[0])));
-
620  obs_[i]->set_shape(std::move(copy2), true);
-
621  }
-
622  }
-
623  for (unsigned i = 0; i < systs_.size(); ++i) {
-
624  TH1 const* proc_hist = nullptr;
-
625  double prev_rate = 0.;
-
626  for (unsigned j = 0; j < procs_.size(); ++j) {
-
627  if (MatchingProcess(*(procs_[j]), *(systs_[i].get()))) {
-
628  proc_hist = scaled_procs[j].get();
-
629  prev_rate = prev_proc_rates[j];
-
630  }
+ +
536  std::string const& name) const {
+
537  auto it = params_.find(name);
+
538  if (it != params_.end()) {
+
539  return it->second.get();
+
540  } else {
+
541  return nullptr;
+
542  }
+
543 }
+
544 
+ +
546  auto it = params_.find(name);
+
547  if (it != params_.end()) {
+
548  return it->second.get();
+
549  } else {
+
550  return nullptr;
+
551  }
+
552 }
+
553 
+ +
555  std::vector<ch::Parameter> const& params) {
+
556  for (unsigned i = 0; i < params.size(); ++i) {
+
557  auto it = params_.find(params[i].name());
+
558  if (it != params_.end()) {
+
559  it->second->set_val(params[i].val());
+
560  it->second->set_err_d(params[i].err_d());
+
561  it->second->set_err_u(params[i].err_u());
+
562  } else {
+
563  if (verbosity_ >= 1) {
+
564  LOGLINE(log(), "Parameter " + params[i].name() + " is not defined");
+
565  }
+
566  }
+
567  }
+
568 }
+
569 
+
570 void CombineHarvester::UpdateParameters(RooFitResult const& fit) {
+
571  for (int i = 0; i < fit.floatParsFinal().getSize(); ++i) {
+
572  RooRealVar const* var =
+
573  dynamic_cast<RooRealVar const*>(fit.floatParsFinal().at(i));
+
574  // check for failed cast here
+
575  auto it = params_.find(std::string(var->GetName()));
+
576  if (it != params_.end()) {
+
577  it->second->set_val(var->getVal());
+
578  it->second->set_err_d(var->getErrorLo());
+
579  it->second->set_err_u(var->getErrorHi());
+
580  } else {
+
581  if (verbosity_ >= 1) {
+
582  LOGLINE(log(),
+
583  "Parameter " + std::string(var->GetName()) + " is not defined");
+
584  }
+
585  }
+
586  }
+
587 }
+
588 
+
589 void CombineHarvester::UpdateParameters(RooFitResult const* fit) {
+
590  UpdateParameters(*fit);
+
591 }
+
592 
+
593 std::vector<ch::Parameter> CombineHarvester::GetParameters() const {
+
594  std::vector<ch::Parameter> params;
+
595  for (auto const& it : params_) {
+
596  params.push_back(*(it.second));
+
597  }
+
598  return params;
+
599 }
+
600 
+
601 void CombineHarvester::VariableRebin(std::vector<double> bins) {
+
602  // We need to keep a record of the Process rates before we rebin. The
+
603  // reasoning comes from the following scenario: the user might choose a new
+
604  // binning which excludes some of the existing bins - thus changing the
+
605  // process normalisation. This is fine, but we also need to adjust the shape
+
606  // Systematic entries - both the rebinning and the adjustment of the value_u
+
607  // and value_d shifts.
+
608  std::vector<double> prev_proc_rates(procs_.size());
+
609 
+
610  // Also hold on the scaled Process hists *after* the rebinning is done - these
+
611  // are needed to update the associated Systematic entries
+
612  std::vector<std::unique_ptr<TH1>> scaled_procs(procs_.size());
+
613 
+
614  for (unsigned i = 0; i < procs_.size(); ++i) {
+
615  if (procs_[i]->shape()) {
+
616  // Get the scaled shape here
+
617  std::unique_ptr<TH1> copy(procs_[i]->ClonedScaledShape());
+
618  // shape norm should only be "no_norm_rate"
+
619  prev_proc_rates[i] = procs_[i]->no_norm_rate();
+
620  std::unique_ptr<TH1> copy2(copy->Rebin(bins.size()-1, "", &(bins[0])));
+
621  // The process shape & rate will be reset here
+
622  procs_[i]->set_shape(std::move(copy2), true);
+
623  scaled_procs[i] = procs_[i]->ClonedScaledShape();
+
624  }
+
625  }
+
626  for (unsigned i = 0; i < obs_.size(); ++i) {
+
627  if (obs_[i]->shape()) {
+
628  std::unique_ptr<TH1> copy(obs_[i]->ClonedScaledShape());
+
629  std::unique_ptr<TH1> copy2(copy->Rebin(bins.size()-1, "", &(bins[0])));
+
630  obs_[i]->set_shape(std::move(copy2), true);
631  }
-
632  if (systs_[i]->shape_u() && systs_[i]->shape_d()) {
-
633  // These hists will be normalised to unity
-
634  std::unique_ptr<TH1> copy_u(systs_[i]->ClonedShapeU());
-
635  std::unique_ptr<TH1> copy_d(systs_[i]->ClonedShapeD());
-
636 
-
637  // If we found a matching Process we will scale this back up to their
-
638  // initial rates
-
639  if (proc_hist) {
-
640  copy_u->Scale(systs_[i]->value_u() * prev_rate);
-
641  copy_d->Scale(systs_[i]->value_d() * prev_rate);
-
642  }
-
643  std::unique_ptr<TH1> copy2_u(
-
644  copy_u->Rebin(bins.size() - 1, "", &(bins[0])));
-
645  std::unique_ptr<TH1> copy2_d(
-
646  copy_d->Rebin(bins.size() - 1, "", &(bins[0])));
-
647  // If we have proc_hist != nullptr, set_shapes will re-calculate value_u
-
648  // and value_d for us, before scaling the new hists back to unity
-
649  systs_[i]->set_shapes(std::move(copy2_u), std::move(copy2_d), proc_hist);
-
650  }
-
651  }
-
652 }
-
653 
-
654 void CombineHarvester::ZeroBins(double min, double max) {
-
655  // We need to keep a record of the Process rates before we set bins to 0. The
-
656  // This is necessary because we need to make sure the process normalisation
-
657  // and shape systematic entries are correctly adjusted
-
658  std::vector<double> prev_proc_rates(procs_.size());
-
659 
-
660  // Also hold on the scaled Process hists *after* some of the bins have
-
661  // been set to 0 - these
-
662  // are needed to update the associated Systematic entries
-
663  std::vector<std::unique_ptr<TH1>> scaled_procs(procs_.size());
-
664 
-
665  for (unsigned i = 0; i < procs_.size(); ++i) {
-
666  if (procs_[i]->shape()) {
-
667  // Get the scaled shape here
-
668  std::unique_ptr<TH1> copy(procs_[i]->ClonedScaledShape());
-
669  // shape norm should only be "no_norm_rate"
-
670  prev_proc_rates[i] = procs_[i]->no_norm_rate();
-
671  for (int j = 1; j <= copy->GetNbinsX();j ++){
-
672  if(copy->GetBinLowEdge(j) >= min && copy->GetBinLowEdge(j+1) <= max){
-
673  copy->SetBinContent(j,0.);
-
674  copy->SetBinError(j,0.);
-
675  }
-
676  }
-
677  // The process shape & rate will be reset here
-
678  procs_[i]->set_shape(std::move(copy), true);
-
679  scaled_procs[i] = procs_[i]->ClonedScaledShape();
-
680  }
-
681  }
-
682  for (unsigned i = 0; i < obs_.size(); ++i) {
-
683  if (obs_[i]->shape()) {
-
684  std::unique_ptr<TH1> copy(obs_[i]->ClonedScaledShape());
-
685  for (int j = 1; j <= copy->GetNbinsX();j ++){
-
686  if(copy->GetBinLowEdge(j) >= min && copy->GetBinLowEdge(j+1) <= max){
-
687  copy->SetBinContent(j,0.);
-
688  copy->SetBinError(j,0.);
-
689  }
-
690  }
-
691  obs_[i]->set_shape(std::move(copy), true);
-
692  }
-
693  }
-
694  for (unsigned i = 0; i < systs_.size(); ++i) {
-
695  TH1 const* proc_hist = nullptr;
-
696  double prev_rate = 0.;
-
697  for (unsigned j = 0; j < procs_.size(); ++j) {
-
698  if (MatchingProcess(*(procs_[j]), *(systs_[i].get()))) {
-
699  proc_hist = scaled_procs[j].get();
-
700  prev_rate = prev_proc_rates[j];
-
701  }
+
632  }
+
633  for (unsigned i = 0; i < systs_.size(); ++i) {
+
634  TH1 const* proc_hist = nullptr;
+
635  double prev_rate = 0.;
+
636  for (unsigned j = 0; j < procs_.size(); ++j) {
+
637  if (MatchingProcess(*(procs_[j]), *(systs_[i].get()))) {
+
638  proc_hist = scaled_procs[j].get();
+
639  prev_rate = prev_proc_rates[j];
+
640  }
+
641  }
+
642  if (systs_[i]->shape_u() && systs_[i]->shape_d()) {
+
643  // These hists will be normalised to unity
+
644  std::unique_ptr<TH1> copy_u(systs_[i]->ClonedShapeU());
+
645  std::unique_ptr<TH1> copy_d(systs_[i]->ClonedShapeD());
+
646 
+
647  // If we found a matching Process we will scale this back up to their
+
648  // initial rates
+
649  if (proc_hist) {
+
650  copy_u->Scale(systs_[i]->value_u() * prev_rate);
+
651  copy_d->Scale(systs_[i]->value_d() * prev_rate);
+
652  }
+
653  std::unique_ptr<TH1> copy2_u(
+
654  copy_u->Rebin(bins.size() - 1, "", &(bins[0])));
+
655  std::unique_ptr<TH1> copy2_d(
+
656  copy_d->Rebin(bins.size() - 1, "", &(bins[0])));
+
657  // If we have proc_hist != nullptr, set_shapes will re-calculate value_u
+
658  // and value_d for us, before scaling the new hists back to unity
+
659  systs_[i]->set_shapes(std::move(copy2_u), std::move(copy2_d), proc_hist);
+
660  }
+
661  }
+
662 }
+
663 
+
664 void CombineHarvester::ZeroBins(double min, double max) {
+
665  // We need to keep a record of the Process rates before we set bins to 0. The
+
666  // This is necessary because we need to make sure the process normalisation
+
667  // and shape systematic entries are correctly adjusted
+
668  std::vector<double> prev_proc_rates(procs_.size());
+
669 
+
670  // Also hold on the scaled Process hists *after* some of the bins have
+
671  // been set to 0 - these
+
672  // are needed to update the associated Systematic entries
+
673  std::vector<std::unique_ptr<TH1>> scaled_procs(procs_.size());
+
674 
+
675  for (unsigned i = 0; i < procs_.size(); ++i) {
+
676  if (procs_[i]->shape()) {
+
677  // Get the scaled shape here
+
678  std::unique_ptr<TH1> copy(procs_[i]->ClonedScaledShape());
+
679  // shape norm should only be "no_norm_rate"
+
680  prev_proc_rates[i] = procs_[i]->no_norm_rate();
+
681  for (int j = 1; j <= copy->GetNbinsX();j ++){
+
682  if(copy->GetBinLowEdge(j) >= min && copy->GetBinLowEdge(j+1) <= max){
+
683  copy->SetBinContent(j,0.);
+
684  copy->SetBinError(j,0.);
+
685  }
+
686  }
+
687  // The process shape & rate will be reset here
+
688  procs_[i]->set_shape(std::move(copy), true);
+
689  scaled_procs[i] = procs_[i]->ClonedScaledShape();
+
690  }
+
691  }
+
692  for (unsigned i = 0; i < obs_.size(); ++i) {
+
693  if (obs_[i]->shape()) {
+
694  std::unique_ptr<TH1> copy(obs_[i]->ClonedScaledShape());
+
695  for (int j = 1; j <= copy->GetNbinsX();j ++){
+
696  if(copy->GetBinLowEdge(j) >= min && copy->GetBinLowEdge(j+1) <= max){
+
697  copy->SetBinContent(j,0.);
+
698  copy->SetBinError(j,0.);
+
699  }
+
700  }
+
701  obs_[i]->set_shape(std::move(copy), true);
702  }
-
703  if (systs_[i]->shape_u() && systs_[i]->shape_d()) {
-
704  // These hists will be normalised to unity
-
705  std::unique_ptr<TH1> copy_u(systs_[i]->ClonedShapeU());
-
706  std::unique_ptr<TH1> copy_d(systs_[i]->ClonedShapeD());
-
707 
-
708  // If we found a matching Process we will scale this back up to their
-
709  // initial rates
-
710  if (proc_hist) {
-
711  copy_u->Scale(systs_[i]->value_u() * prev_rate);
-
712  copy_d->Scale(systs_[i]->value_d() * prev_rate);
-
713  }
-
714  for (int j = 1; j <= copy_u->GetNbinsX();j ++){
-
715  if(copy_u->GetBinLowEdge(j) >= min && copy_u->GetBinLowEdge(j+1) <= max){
-
716  copy_u->SetBinContent(j,0.);
-
717  copy_u->SetBinError(j,0.);
-
718  }
-
719  if(copy_d->GetBinLowEdge(j) >= min && copy_d->GetBinLowEdge(j+1) <= max){
-
720  copy_d->SetBinContent(j,0.);
-
721  copy_d->SetBinError(j,0.);
-
722  }
+
703  }
+
704  for (unsigned i = 0; i < systs_.size(); ++i) {
+
705  TH1 const* proc_hist = nullptr;
+
706  double prev_rate = 0.;
+
707  for (unsigned j = 0; j < procs_.size(); ++j) {
+
708  if (MatchingProcess(*(procs_[j]), *(systs_[i].get()))) {
+
709  proc_hist = scaled_procs[j].get();
+
710  prev_rate = prev_proc_rates[j];
+
711  }
+
712  }
+
713  if (systs_[i]->shape_u() && systs_[i]->shape_d()) {
+
714  // These hists will be normalised to unity
+
715  std::unique_ptr<TH1> copy_u(systs_[i]->ClonedShapeU());
+
716  std::unique_ptr<TH1> copy_d(systs_[i]->ClonedShapeD());
+
717 
+
718  // If we found a matching Process we will scale this back up to their
+
719  // initial rates
+
720  if (proc_hist) {
+
721  copy_u->Scale(systs_[i]->value_u() * prev_rate);
+
722  copy_d->Scale(systs_[i]->value_d() * prev_rate);
723  }
-
724  // If we have proc_hist != nullptr, set_shapes will re-calculate value_u
-
725  // and value_d for us, before scaling the new hists back to unity
-
726  systs_[i]->set_shapes(std::move(copy_u), std::move(copy_d), proc_hist);
-
727  }
-
728  }
-
729 }
-
730 
-
731 
-
732 void CombineHarvester::SetPdfBins(unsigned nbins) {
-
733  for (unsigned i = 0; i < procs_.size(); ++i) {
-
734  std::set<std::string> binning_vars;
-
735  if (procs_[i]->pdf()) {
-
736  RooAbsData const* data_obj = FindMatchingData(procs_[i].get());
-
737  std::string var_name = "CMS_th1x";
-
738  if (data_obj) var_name = data_obj->get()->first()->GetName();
-
739  binning_vars.insert(var_name);
-
740  }
-
741  for (auto & it : wspaces_) {
-
742  for (auto & var : binning_vars) {
-
743  RooRealVar* avar =
-
744  dynamic_cast<RooRealVar*>(it.second->var(var.c_str()));
-
745  if (avar) avar->setBins(nbins);
-
746  }
-
747  }
-
748  }
-
749 }
-
750 
-
751 // This implementation "borowed" from
-
752 // HiggsAnalysis/CombinedLimit/src/ProcessNormalization.cc
-
753 double CombineHarvester::logKappaForX(double x, double k_low,
-
754  double k_high) const {
-
755  if (k_high == 0. || k_low == 0.) {
-
756  if (verbosity_ >= 1) {
-
757  LOGLINE(log(), "Have kappa=0.0 (scaling ill-defined), returning 1.0");
-
758  }
-
759  return 1.;
-
760  }
-
761  if (fabs(x) >= 0.5)
-
762  return (x >= 0 ? std::pow(k_high, x) : std::pow(k_low, -1.0 * x));
-
763  // interpolate between log(kappaHigh) and -log(kappaLow)
-
764  // logKappa(x) = avg + halfdiff * h(2x)
-
765  // where h(x) is the 3th order polynomial
-
766  // h(x) = (3 x^5 - 10 x^3 + 15 x)/8;
-
767  // chosen so that h(x) satisfies the following:
-
768  // h (+/-1) = +/-1
-
769  // h'(+/-1) = 0
-
770  // h"(+/-1) = 0
-
771  double logKhi = std::log(k_high);
-
772  double logKlo = -std::log(k_low);
-
773  double avg = 0.5 * (logKhi + logKlo), halfdiff = 0.5 * (logKhi - logKlo);
-
774  double twox = x + x, twox2 = twox * twox;
-
775  double alpha = 0.125 * twox * (twox2 * (3 * twox2 - 10.) + 15.);
-
776  double ret = avg + alpha * halfdiff;
-
777  return std::exp(ret * x);
-
778 }
-
779 
-
780 void CombineHarvester::SetGroup(std::string const& name,
-
781  std::vector<std::string> const& patterns) {
-
782  std::vector<boost::regex> rgx;
-
783  for (auto const& pt : patterns) rgx.emplace_back(pt);
-
784  for (auto it = params_.begin(); it != params_.end(); ++it) {
-
785  std::string par = it->first;
-
786  auto & groups = it->second->groups();
-
787  if (groups.count(name)) continue;
-
788  if (ch::contains_rgx(rgx, par)) {
-
789  groups.insert(name);
-
790  };
-
791  }
-
792 }
-
793 
-
794 void CombineHarvester::RemoveGroup(std::string const& name,
-
795  std::vector<std::string> const& patterns) {
-
796  std::vector<boost::regex> rgx;
-
797  for (auto const& pt : patterns) rgx.emplace_back(pt);
-
798  for (auto it = params_.begin(); it != params_.end(); ++it) {
-
799  std::string par = it->first;
-
800  auto & groups = it->second->groups();
-
801  if (!groups.count(name)) continue;
-
802  if (ch::contains_rgx(rgx, par)) {
-
803  groups.erase(name);
-
804  };
-
805  }
-
806 }
-
807 
-
808 void CombineHarvester::RenameGroup(std::string const& oldname,
-
809  std::string const& newname) {
-
810  for (auto it = params_.begin(); it != params_.end(); ++it) {
-
811  auto & groups = it->second->groups();
-
812  if (groups.count(oldname)) {
-
813  groups.erase(oldname);
-
814  groups.insert(newname);
-
815  }
-
816  }
-
817 }
-
818 
-
819 void CombineHarvester::AddDatacardLineAtEnd(std::string const& line) {
-
820  post_lines_.push_back(line);
-
821 }
-
822 
- -
824  post_lines_.clear();
-
825 }
-
826 }
-
- -
void AddDatacardLineAtEnd(std::string const &line)
Add a line of text at the end of all datacards.
- -
TH2F GetRateCovariance(RooFitResult const &fit, unsigned n_samples)
- -
void RenameGroup(std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group.
-
void VariableRebin(std::vector< double > bins)
- - -
bool any_of(const Range &r, Predicate p)
Definition: Algorithm.h:17
-
bool MatchingProcess(T const &first, U const &second)
Definition: Utilities.h:43
+
724  for (int j = 1; j <= copy_u->GetNbinsX();j ++){
+
725  if(copy_u->GetBinLowEdge(j) >= min && copy_u->GetBinLowEdge(j+1) <= max){
+
726  copy_u->SetBinContent(j,0.);
+
727  copy_u->SetBinError(j,0.);
+
728  }
+
729  if(copy_d->GetBinLowEdge(j) >= min && copy_d->GetBinLowEdge(j+1) <= max){
+
730  copy_d->SetBinContent(j,0.);
+
731  copy_d->SetBinError(j,0.);
+
732  }
+
733  }
+
734  // If we have proc_hist != nullptr, set_shapes will re-calculate value_u
+
735  // and value_d for us, before scaling the new hists back to unity
+
736  systs_[i]->set_shapes(std::move(copy_u), std::move(copy_d), proc_hist);
+
737  }
+
738  }
+
739 }
+
740 
+
741 
+
742 void CombineHarvester::SetPdfBins(unsigned nbins) {
+
743  for (unsigned i = 0; i < procs_.size(); ++i) {
+
744  std::set<std::string> binning_vars;
+
745  if (procs_[i]->pdf()) {
+
746  RooAbsData const* data_obj = FindMatchingData(procs_[i].get());
+
747  std::string var_name = "CMS_th1x";
+
748  if (data_obj) var_name = data_obj->get()->first()->GetName();
+
749  binning_vars.insert(var_name);
+
750  }
+
751  for (auto & it : wspaces_) {
+
752  for (auto & var : binning_vars) {
+
753  RooRealVar* avar =
+
754  dynamic_cast<RooRealVar*>(it.second->var(var.c_str()));
+
755  if (avar) avar->setBins(nbins);
+
756  }
+
757  }
+
758  }
+
759 }
+
760 
+
761 // This implementation "borowed" from
+
762 // HiggsAnalysis/CombinedLimit/src/ProcessNormalization.cc
+
763 double CombineHarvester::logKappaForX(double x, double k_low,
+
764  double k_high) const {
+
765  if (k_high == 0. || k_low == 0.) {
+
766  if (verbosity_ >= 1) {
+
767  LOGLINE(log(), "Have kappa=0.0 (scaling ill-defined), returning 1.0");
+
768  }
+
769  return 1.;
+
770  }
+
771  if (fabs(x) >= 0.5)
+
772  return (x >= 0 ? std::pow(k_high, x) : std::pow(k_low, -1.0 * x));
+
773  // interpolate between log(kappaHigh) and -log(kappaLow)
+
774  // logKappa(x) = avg + halfdiff * h(2x)
+
775  // where h(x) is the 3th order polynomial
+
776  // h(x) = (3 x^5 - 10 x^3 + 15 x)/8;
+
777  // chosen so that h(x) satisfies the following:
+
778  // h (+/-1) = +/-1
+
779  // h'(+/-1) = 0
+
780  // h"(+/-1) = 0
+
781  double logKhi = std::log(k_high);
+
782  double logKlo = -std::log(k_low);
+
783  double avg = 0.5 * (logKhi + logKlo), halfdiff = 0.5 * (logKhi - logKlo);
+
784  double twox = x + x, twox2 = twox * twox;
+
785  double alpha = 0.125 * twox * (twox2 * (3 * twox2 - 10.) + 15.);
+
786  double ret = avg + alpha * halfdiff;
+
787  return std::exp(ret * x);
+
788 }
+
789 
+
790 void CombineHarvester::SetGroup(std::string const& name,
+
791  std::vector<std::string> const& patterns) {
+
792  std::vector<boost::regex> rgx;
+
793  for (auto const& pt : patterns) rgx.emplace_back(pt);
+
794  for (auto it = params_.begin(); it != params_.end(); ++it) {
+
795  std::string par = it->first;
+
796  auto & groups = it->second->groups();
+
797  if (groups.count(name)) continue;
+
798  if (ch::contains_rgx(rgx, par)) {
+
799  groups.insert(name);
+
800  };
+
801  }
+
802 }
+
803 
+
804 void CombineHarvester::RemoveGroup(std::string const& name,
+
805  std::vector<std::string> const& patterns) {
+
806  std::vector<boost::regex> rgx;
+
807  for (auto const& pt : patterns) rgx.emplace_back(pt);
+
808  for (auto it = params_.begin(); it != params_.end(); ++it) {
+
809  std::string par = it->first;
+
810  auto & groups = it->second->groups();
+
811  if (!groups.count(name)) continue;
+
812  if (ch::contains_rgx(rgx, par)) {
+
813  groups.erase(name);
+
814  };
+
815  }
+
816 }
+
817 
+
818 void CombineHarvester::RenameGroup(std::string const& oldname,
+
819  std::string const& newname) {
+
820  for (auto it = params_.begin(); it != params_.end(); ++it) {
+
821  auto & groups = it->second->groups();
+
822  if (groups.count(oldname)) {
+
823  groups.erase(oldname);
+
824  groups.insert(newname);
+
825  }
+
826  }
+
827 }
+
828 
+
829 void CombineHarvester::AddDatacardLineAtEnd(std::string const& line) {
+
830  post_lines_.push_back(line);
+
831 }
+
832 
+ +
834  post_lines_.clear();
+
835 }
+
836 }
+ + +
#define LOGLINE(x, y)
Definition: Logging.h:11
#define FNERROR(x)
Definition: Logging.h:9
- -
void UpdateParameters(std::vector< ch::Parameter > const &params)
- - -
ch::Parameter const * GetParameter(std::string const &name) const
-
void ClearDatacardLinesAtEnd()
Clear all added datacard lines.
-
std::set< std::string > bin_set()
-
void SetPdfBins(unsigned nbins)
-
bool contains_rgx(const std::vector< boost::regex > &r, T p)
Definition: Algorithm.h:34
+ + + -
Definition: Algorithm.h:10
- -
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
std::vector< ch::Parameter > GetParameters() const
- - -
void RemoveGroup(std::string const &name, std::vector< std::string > const &patterns)
Remove parameters to a given group.
- + +
TH2F GetRateCovariance(RooFitResult const &fit, unsigned n_samples)
+
void ZeroBins(double min, double max)
+ + +
void RenameParameter(std::string const &oldname, std::string const &newname)
+
TH2F GetRateCorrelation(RooFitResult const &fit, unsigned n_samples)
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+ - -
TH2F GetRateCorrelation(RooFitResult const &fit, unsigned n_samples)
+
void AddDatacardLineAtEnd(std::string const &line)
Add a line of text at the end of all datacards.
+
void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
+ +
void RenameGroup(std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group.
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-
#define LOGLINE(x, y)
Definition: Logging.h:11
-
void RenameParameter(std::string const &oldname, std::string const &newname)
- -
std::string const & name() const
Definition: Systematic.h:21
-
void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
- -
void ZeroBins(double min, double max)
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
void UpdateParameters(std::vector< ch::Parameter > const &params)
+
std::set< std::string > bin_set()
+ +
void VariableRebin(std::vector< double > bins)
+
void RemoveGroup(std::string const &name, std::vector< std::string > const &patterns)
Remove parameters to a given group.
+
void ClearDatacardLinesAtEnd()
Clear all added datacard lines.
+
std::vector< ch::Parameter > GetParameters() const
+
void SetPdfBins(unsigned nbins)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
ch::Parameter const * GetParameter(std::string const &name) const
+ + + +
std::string const & name() const
Definition: Systematic.h:22
+
Definition: Algorithm.h:10
+
bool contains_rgx(const std::vector< boost::regex > &r, T p)
Definition: Algorithm.h:34
+
bool any_of(const Range &r, Predicate p)
Definition: Algorithm.h:17
+
bool MatchingProcess(T const &first, U const &second)
Definition: Utilities.h:43
+ + diff --git a/_combine_harvester___filters_8cc.html b/_combine_harvester___filters_8cc.html index 0476efb04ef..9c3450a91d7 100644 --- a/_combine_harvester___filters_8cc.html +++ b/_combine_harvester___filters_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester_Filters.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_combine_harvester___filters_8cc_source.html b/_combine_harvester___filters_8cc_source.html index 3d9cc6571a3..c2b29e5f9fa 100644 --- a/_combine_harvester___filters_8cc_source.html +++ b/_combine_harvester___filters_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CombineHarvester_Filters.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -219,13 +216,13 @@
112  std::vector<std::string> const& vec, std::string attr_label, bool cond) {
113  if (GetFlag("filters-use-regex")) {
-
114  FilterContainingRgx(procs_, vec, std::mem_fn(&Process::attribute), attr_label, cond);
-
115  FilterContainingRgx(obs_, vec, std::mem_fn(&Observation::attribute), attr_label, cond);
-
116  FilterContainingRgx(systs_, vec, std::mem_fn(&Systematic::attribute), attr_label, cond);
+
114  FilterContainingRgx(procs_, vec, std::mem_fn(&Process::attribute), attr_label, cond);
+
115  FilterContainingRgx(obs_, vec, std::mem_fn(&Observation::attribute), attr_label, cond);
+
116  FilterContainingRgx(systs_, vec, std::mem_fn(&Systematic::attribute), attr_label, cond);
117  } else {
-
118  FilterContaining(procs_, vec, std::mem_fn(&Process::attribute), attr_label, cond);
-
119  FilterContaining(obs_, vec, std::mem_fn(&Observation::attribute), attr_label, cond);
-
120  FilterContaining(systs_, vec, std::mem_fn(&Systematic::attribute), attr_label, cond);
+
118  FilterContaining(procs_, vec, std::mem_fn(&Process::attribute), attr_label, cond);
+
119  FilterContaining(obs_, vec, std::mem_fn(&Observation::attribute), attr_label, cond);
+
120  FilterContaining(systs_, vec, std::mem_fn(&Systematic::attribute), attr_label, cond);
121  }
122  return *this;
123 }
@@ -388,57 +385,57 @@
280  return result;
281 }
282 }
-
- -
std::set< std::string > channel_set()
-
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
-
void FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)
Definition: Algorithm.h:49
-
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
-
std::set< std::string > process_set()
-
void erase_if(Range &r, Predicate p)
Definition: Algorithm.h:12
-
virtual std::string const & era() const
Definition: Object.h:29
-
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
-
bool GetFlag(std::string const &flag) const
+ + + -
virtual std::string const & bin() const
Definition: Object.h:17
+ +
CombineHarvester & process_rgx(std::vector< std::string > const &vec, bool cond=true)
-
virtual std::string const & channel() const
Definition: Object.h:32
CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
-
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
-
std::set< std::string > syst_name_set()
CombineHarvester & backgrounds()
-
virtual std::string const & analysis() const
Definition: Object.h:26
-
std::set< std::string > bin_set()
-
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
-
virtual std::string const & mass() const
Definition: Object.h:38
CombineHarvester & signals()
-
std::set< std::string > mass_set()
+
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
+ +
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
+ +
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
- -
std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
-
Definition: Algorithm.h:10
- -
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
-
CombineHarvester & histograms()
+
std::set< std::string > process_set()
+
CombineHarvester & attr(std::vector< std::string > const &vec, std::string attr_label, bool cond=true)
+
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
+
std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
+
std::set< std::string > syst_type_set()
+
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > mass_set()
+
std::set< std::string > bin_set()
+
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
+
bool GetFlag(std::string const &flag) const
std::set< std::string > era_set()
-
virtual int bin_id() const
Definition: Object.h:35
+
std::set< std::string > channel_set()
+
CombineHarvester & histograms()
+
std::set< std::string > syst_name_set()
std::set< std::string > analysis_set()
-
std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
- -
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
- - -
void FilterContaining(Input &in, Filter const &filter, Converter fn, bool cond)
Definition: Algorithm.h:41
- -
std::string const & name() const
Definition: Systematic.h:21
-
CombineHarvester & attr(std::vector< std::string > const &vec, std::string attr_label, bool cond=true)
- +
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
+
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
+
virtual std::string const attribute(std::string const &attr_label) const
Definition: Object.h:44
virtual std::string const & process() const
Definition: Object.h:20
-
virtual const std::string attribute(std::string const &attr_label) const
Definition: Object.h:44
-
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
-
std::set< std::string > syst_type_set()
-
std::string const & type() const
Definition: Systematic.h:24
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual int bin_id() const
Definition: Object.h:35
+
virtual std::string const & analysis() const
Definition: Object.h:26
+
virtual std::string const & era() const
Definition: Object.h:29
+
virtual std::string const & mass() const
Definition: Object.h:38
+
virtual std::string const & channel() const
Definition: Object.h:32
+
std::string const & type() const
Definition: Systematic.h:25
+
std::string const & name() const
Definition: Systematic.h:22
+
Definition: Algorithm.h:10
+
void FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)
Definition: Algorithm.h:49
+
void FilterContaining(Input &in, Filter const &filter, Converter fn, bool cond)
Definition: Algorithm.h:41
+
void erase_if(Range &r, Predicate p)
Definition: Algorithm.h:12
+ + diff --git a/_combine_pdfs_2src_2classes_8h.html b/_combine_pdfs_2src_2classes_8h.html index 82fe75d77f0..88576d82960 100644 --- a/_combine_pdfs_2src_2classes_8h.html +++ b/_combine_pdfs_2src_2classes_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/src/classes.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_combine_pdfs_2src_2classes_8h_source.html b/_combine_pdfs_2src_2classes_8h_source.html index 0126fc7dd08..9cff1ad8c9d 100644 --- a/_combine_pdfs_2src_2classes_8h_source.html +++ b/_combine_pdfs_2src_2classes_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/src/classes.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@ - - diff --git a/_combine_tools_2src_2classes_8h.html b/_combine_tools_2src_2classes_8h.html index a7acdf6ecbc..d25595c49e9 100644 --- a/_combine_tools_2src_2classes_8h.html +++ b/_combine_tools_2src_2classes_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/classes.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_combine_tools_2src_2classes_8h_source.html b/_combine_tools_2src_2classes_8h_source.html index bc448c3a359..751070a0560 100644 --- a/_combine_tools_2src_2classes_8h_source.html +++ b/_combine_tools_2src_2classes_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/classes.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@ - - - - - - + + + + + + + diff --git a/_copy_tools_8cc.html b/_copy_tools_8cc.html index 07477437141..b6afbd7a46c 100644 --- a/_copy_tools_8cc.html +++ b/_copy_tools_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CopyTools.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_copy_tools_8cc_source.html b/_copy_tools_8cc_source.html index 8353aa55808..3fbd9e770a7 100644 --- a/_copy_tools_8cc_source.html +++ b/_copy_tools_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/CopyTools.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -118,30 +115,28 @@
10  std::string const& split1, std::string const& split2,
11  double val1, double val2) {
12  CloneSysts(cb.cp().syst_name({syst_in}), cb, [&](Systematic *s) {
-
13  s->set_name(split1);
-
14  s->set_value_u(val1);
+
13  s->set_name(split1);
+
14  s->set_value_u(val1);
15  });
16  CloneSysts(cb.cp().syst_name({syst_in}), cb, [&](Systematic *s) {
-
17  s->set_name(split2);
-
18  s->set_value_u(val2);
+
17  s->set_name(split2);
+
18  s->set_value_u(val2);
19  });
20  cb.syst_name({syst_in}, false);
21 }
22 }
-
- -
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,...
Definition: CopyTools.h:60
+ -
Definition: Algorithm.h:10
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
- -
void set_value_u(double const &value_u)
Definition: Systematic.h:26
-
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.
Definition: CopyTools.cc:9
-
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
-
void set_name(std::string const &name)
Definition: Systematic.cc:54
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+ +
Definition: Algorithm.h:10
+
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.
Definition: CopyTools.cc:9
+
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,...
Definition: CopyTools.h:60
+ + diff --git a/_copy_tools_8h.html b/_copy_tools_8h.html index 59db6e41874..4e5247eae00 100644 --- a/_copy_tools_8h.html +++ b/_copy_tools_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/CopyTools.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_copy_tools_8h_source.html b/_copy_tools_8h_source.html index cde851c212e..5aa8cfcd670 100644 --- a/_copy_tools_8h_source.html +++ b/_copy_tools_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/CopyTools.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -160,26 +157,26 @@
117 }
118 
119 #endif
-
- -
void CloneObs(ch::CombineHarvester &src, ch::CombineHarvester &dest, Function func)
Duplicate Observation objects in one instance, which are then modified by a user-supplied function,...
Definition: CopyTools.h:22
-
void ForEachProc(Function func)
-
void ForEachObs(Function func)
-
void InsertProcess(ch::Process const &proc)
-
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,...
Definition: CopyTools.h:60
-
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...
Definition: CopyTools.h:93
-
void InsertObservation(ch::Observation const &obs)
- -
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,...
Definition: CopyTools.h:41
-
Definition: Algorithm.h:10
-
void InsertSystematic(ch::Systematic const &sys)
- -
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.
Definition: CopyTools.cc:9
- -
void ForEachSyst(Function func)
+ +
void ForEachSyst(Function func)
+
void ForEachProc(Function func)
+
void InsertProcess(ch::Process const &proc)
+
void ForEachObs(Function func)
+
void InsertSystematic(ch::Systematic const &sys)
+
void InsertObservation(ch::Observation const &obs)
+ + +
Definition: Algorithm.h:10
+
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.
Definition: CopyTools.cc:9
+
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,...
Definition: CopyTools.h:41
+
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...
Definition: CopyTools.h:93
+
void CloneObs(ch::CombineHarvester &src, ch::CombineHarvester &dest, Function func)
Duplicate Observation objects in one instance, which are then modified by a user-supplied function,...
Definition: CopyTools.h:22
+
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,...
Definition: CopyTools.h:60
+ + diff --git a/_example1_8md.html b/_example1_8md.html index bc79c355f81..93feb8e6de6 100644 --- a/_example1_8md.html +++ b/_example1_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/Example1.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_example2_8md.html b/_example2_8md.html index 2f3e9e4a151..9ee7d81306a 100644 --- a/_example2_8md.html +++ b/_example2_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/Example2.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_example3_8md.html b/_example3_8md.html index 13b2bf2ef58..8b208343020 100644 --- a/_example3_8md.html +++ b/_example3_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/Example3.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_hhh_systematics_8cc.html b/_hhh_systematics_8cc.html index aacac28d364..01469874a1d 100644 --- a/_hhh_systematics_8cc.html +++ b/_hhh_systematics_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HhhSystematics.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_hhh_systematics_8cc_source.html b/_hhh_systematics_8cc_source.html index a5258faf1be..75145b1f5f4 100644 --- a/_hhh_systematics_8cc_source.html +++ b/_hhh_systematics_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HhhSystematics.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -417,30 +414,30 @@
309 
310  }
311 }
-
- -
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
- - -
std::set< std::string > process_set()
- + - -
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
-
void AddSystematics_hhh_tt(CombineHarvester &cb, CombineHarvester src)
- -
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
- -
void AddSystematics_hhh_et_mt(CombineHarvester &cb, CombineHarvester src)
+ +
CombineHarvester & signals()
- -
Definition: Algorithm.h:10
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > process_set()
+
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
- - +
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
+ + + +
Definition: Algorithm.h:10
+
void AddSystematics_hhh_et_mt(CombineHarvester &cb, CombineHarvester src)
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
+
void AddSystematics_hhh_tt(CombineHarvester &cb, CombineHarvester src)
+ + + + + diff --git a/_hist_mapping_8cc.html b/_hist_mapping_8cc.html index 5f759a3d1a0..22c9b33b38b 100644 --- a/_hist_mapping_8cc.html +++ b/_hist_mapping_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HistMapping.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_hist_mapping_8cc_source.html b/_hist_mapping_8cc_source.html index 195bb70e7e2..9ba8a4dd31b 100644 --- a/_hist_mapping_8cc_source.html +++ b/_hist_mapping_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HistMapping.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -175,33 +172,33 @@
67  }
68 }
69 
-
70 std::ostream& operator<<(std::ostream& out, HistMapping const& val) {
+
70 std::ostream& operator<<(std::ostream& out, HistMapping const& val) {
71  out << boost::format("%-7s %-7s %-20s %-20s %-20s") % val.process %
72  val.category % (val.file.get() ? val.file->GetName() : "0") %
73  val.pattern % val.syst_pattern;
74  return out;
75 }
76 }
-
- -
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
-
bool IsData() const
Definition: HistMapping.cc:29
-
std::string WorkspaceName() const
Definition: HistMapping.cc:37
-
std::string pattern
Definition: HistMapping.h:13
-
std::string process
Definition: HistMapping.h:11
-
std::string category
Definition: HistMapping.h:12
-
Definition: Algorithm.h:10
-
std::string WorkspaceObj() const
Definition: HistMapping.cc:45
-
std::string SystWorkspaceName() const
Definition: HistMapping.cc:53
-
std::shared_ptr< TFile > file
Definition: HistMapping.h:15
+
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
+
std::string SystWorkspaceObj() const
Definition: HistMapping.cc:61
-
std::string syst_pattern
Definition: HistMapping.h:14
- +
std::shared_ptr< TFile > file
Definition: HistMapping.h:15
+
std::string category
Definition: HistMapping.h:12
+
std::string SystWorkspaceName() const
Definition: HistMapping.cc:53
+
std::string pattern
Definition: HistMapping.h:13
+
bool IsData() const
Definition: HistMapping.cc:29
+
std::string WorkspaceObj() const
Definition: HistMapping.cc:45
bool IsHist() const
Definition: HistMapping.cc:13
+
std::string process
Definition: HistMapping.h:11
+
std::string syst_pattern
Definition: HistMapping.h:14
bool IsPdf() const
Definition: HistMapping.cc:21
+
std::string WorkspaceName() const
Definition: HistMapping.cc:37
+ + + diff --git a/_hist_mapping_8h.html b/_hist_mapping_8h.html index 7541bb5ece8..d81990e78b6 100644 --- a/_hist_mapping_8h.html +++ b/_hist_mapping_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/HistMapping.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_hist_mapping_8h_source.html b/_hist_mapping_8h_source.html index 0ef71349df3..54a9d2a697f 100644 --- a/_hist_mapping_8h_source.html +++ b/_hist_mapping_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/HistMapping.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -141,27 +138,27 @@
33 }
34 
35 #endif
-
- -
bool IsData() const
Definition: HistMapping.cc:29
-
std::string WorkspaceName() const
Definition: HistMapping.cc:37
-
std::string pattern
Definition: HistMapping.h:13
-
std::string process
Definition: HistMapping.h:11
-
friend std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
-
std::string category
Definition: HistMapping.h:12
-
std::shared_ptr< RooWorkspace > sys_ws
Definition: HistMapping.h:17
Definition: Algorithm.h:10
-
std::string WorkspaceObj() const
Definition: HistMapping.cc:45
-
std::string SystWorkspaceName() const
Definition: HistMapping.cc:53
-
std::shared_ptr< TFile > file
Definition: HistMapping.h:15
-
std::shared_ptr< RooWorkspace > ws
Definition: HistMapping.h:16
+ +
friend std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
std::string SystWorkspaceObj() const
Definition: HistMapping.cc:61
-
std::string syst_pattern
Definition: HistMapping.h:14
- +
std::shared_ptr< TFile > file
Definition: HistMapping.h:15
+
std::string category
Definition: HistMapping.h:12
+
std::string SystWorkspaceName() const
Definition: HistMapping.cc:53
+
std::string pattern
Definition: HistMapping.h:13
+
bool IsData() const
Definition: HistMapping.cc:29
+
std::string WorkspaceObj() const
Definition: HistMapping.cc:45
bool IsHist() const
Definition: HistMapping.cc:13
+
std::string process
Definition: HistMapping.h:11
+
std::string syst_pattern
Definition: HistMapping.h:14
bool IsPdf() const
Definition: HistMapping.cc:21
+
std::shared_ptr< RooWorkspace > ws
Definition: HistMapping.h:16
+
std::shared_ptr< RooWorkspace > sys_ws
Definition: HistMapping.h:17
+
std::string WorkspaceName() const
Definition: HistMapping.cc:37
+ + diff --git a/_htt_systematics_8h.html b/_htt_systematics_8h.html index 07364e5559b..33efbf7f99a 100644 --- a/_htt_systematics_8h.html +++ b/_htt_systematics_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/HttSystematics.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_htt_systematics_8h_source.html b/_htt_systematics_8h_source.html index 65cbb28eb26..dc3e1f55d2a 100644 --- a/_htt_systematics_8h_source.html +++ b/_htt_systematics_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/HttSystematics.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -149,22 +146,22 @@
41 }
42 
43 #endif
-
- + +
Definition: Algorithm.h:10
void AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb, CombineHarvester src)
void AddMSSMUpdateSystematics_mm(CombineHarvester &cb, CombineHarvester src)
-
void AddMSSMUpdateSystematics_tt(CombineHarvester &cb, CombineHarvester src)
-
void AddSystematics_tt(CombineHarvester &cb)
void AddSystematics_ee_mm(CombineHarvester &cb)
-
void AddSystematics_hhh_tt(CombineHarvester &cb, CombineHarvester src)
-
void AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)
void AddSystematics_hhh_et_mt(CombineHarvester &cb, CombineHarvester src)
-
void AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)
-
Definition: Algorithm.h:10
-
void AddSystematics_et_mt(CombineHarvester &cb)
+
void AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)
void AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)
- +
void AddSystematics_et_mt(CombineHarvester &cb)
+
void AddSystematics_tt(CombineHarvester &cb)
+
void AddMSSMUpdateSystematics_tt(CombineHarvester &cb, CombineHarvester src)
+
void AddSystematics_hhh_tt(CombineHarvester &cb, CombineHarvester src)
+
void AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)
void AddSystematics_em(CombineHarvester &cb)
+ + diff --git a/_htt_systematics___m_s_s_m_legacy_8cc.html b/_htt_systematics___m_s_s_m_legacy_8cc.html index 1d83d2fe262..b366ba67c91 100644 --- a/_htt_systematics___m_s_s_m_legacy_8cc.html +++ b/_htt_systematics___m_s_s_m_legacy_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HttSystematics_MSSMLegacy.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
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 ebfd9a97c81..29006dc595a 100644 --- a/_htt_systematics___m_s_s_m_legacy_8cc_source.html +++ b/_htt_systematics___m_s_s_m_legacy_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HttSystematics_MSSMLegacy.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -271,29 +268,29 @@
163 }
164 
165 }
-
- -
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
- - - + - -
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
- - + +
CombineHarvester & signals()
- -
Definition: Algorithm.h:10
+
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.
+
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
- - -
void AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)
virtual std::string const & process() const
Definition: Object.h:20
+ + + +
Definition: Algorithm.h:10
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
void AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)
+
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
+ + + + + diff --git a/_htt_systematics___m_s_s_m_update_8cc.html b/_htt_systematics___m_s_s_m_update_8cc.html index fa47d262b44..55cb02112f6 100644 --- a/_htt_systematics___m_s_s_m_update_8cc.html +++ b/_htt_systematics___m_s_s_m_update_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HttSystematics_MSSMUpdate.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
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 cff604552d5..5810721a345 100644 --- a/_htt_systematics___m_s_s_m_update_8cc_source.html +++ b/_htt_systematics___m_s_s_m_update_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HttSystematics_MSSMUpdate.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -840,33 +837,33 @@
734 }
735 
736 }
-
- -
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
- - -
void AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb, CombineHarvester src)
-
void AddMSSMUpdateSystematics_mm(CombineHarvester &cb, CombineHarvester src)
- + - -
void AddMSSMUpdateSystematics_tt(CombineHarvester &cb, CombineHarvester src)
-
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
- -
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
- + +
CombineHarvester & signals()
-
void AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)
- -
Definition: Algorithm.h:10
+
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.
+
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
- - +
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
virtual std::string const & process() const
Definition: Object.h:20
+ + + +
Definition: Algorithm.h:10
+
void AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb, CombineHarvester src)
+
void AddMSSMUpdateSystematics_mm(CombineHarvester &cb, CombineHarvester src)
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
+
void AddMSSMUpdateSystematics_tt(CombineHarvester &cb, CombineHarvester src)
+
void AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)
+ + + + + diff --git a/_htt_systematics___s_m_legacy_8cc.html b/_htt_systematics___s_m_legacy_8cc.html index 0331c36dda7..19ec59df929 100644 --- a/_htt_systematics___s_m_legacy_8cc.html +++ b/_htt_systematics___s_m_legacy_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HttSystematics_SMLegacy.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_htt_systematics___s_m_legacy_8cc_source.html b/_htt_systematics___s_m_legacy_8cc_source.html index cb318bf790c..533a24a64e5 100644 --- a/_htt_systematics___s_m_legacy_8cc_source.html +++ b/_htt_systematics___s_m_legacy_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/HttSystematics_SMLegacy.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -929,40 +926,40 @@
821  src.cp().channel({"et"}).process({"ZL"}).bin_id({3, 6, 7})
822  .AddSyst(cb, "CMS_htt_ZLeptonFakeTau_$CHANNEL_low_$ERA", "lnN",
823  SystMap<bin_id>::init({3}, 1.20)({6, 7}, 1.06));
-
824  src.cp().channel({"et"}).process({"ZL"}).bin_id({3, 5})
+
824  src.cp().channel({"et"}).process({"ZL"}).bin_id({3, 5})
825  .AddSyst(cb, "CMS_htt_ZLeptonFakeTau_$CHANNEL_met_$ERA", "lnN",
-
826  SystMap<>::init(1.30));
-
827  src.cp().channel({"et"}).process({"ZL"}).bin_id({1, 6, 7})
+
826  SystMap<>::init(1.30));
+
827  src.cp().channel({"et"}).process({"ZL"}).bin_id({1, 6, 7})
828  .AddSyst(cb, "CMS_htt_ZLeptonFakeTau_$CHANNEL_medium_$ERA", "lnN",
-
829  SystMap<bin_id>::init({1}, 1.20)({6, 7}, 1.08));
-
830  src.cp().channel({"et"}).process({"ZL"}).bin_id({3}).era({"8TeV"})
+
829  SystMap<bin_id>::init({1}, 1.20)({6, 7}, 1.08));
+
830  src.cp().channel({"et"}).process({"ZL"}).bin_id({3}).era({"8TeV"})
831  .AddSyst(cb, "CMS_htt_ZLeptonFakeTau_$CHANNEL_medium_$ERA", "lnN",
-
832  SystMap<bin_id>::init({3}, 1.20));
-
833  src.cp().channel({"et"}).process({"ZL"}).bin_id({2, 5, 6, 7})
+
832  SystMap<bin_id>::init({3}, 1.20));
+
833  src.cp().channel({"et"}).process({"ZL"}).bin_id({2, 5, 6, 7})
834  .AddSyst(cb, "CMS_htt_ZLeptonFakeTau_$CHANNEL_high_$ERA", "lnN",
-
835  SystMap<bin_id>::init({2, 5}, 1.20)({6, 7}, 1.06));
+
835  SystMap<bin_id>::init({2, 5}, 1.20)({6, 7}, 1.06));
836 
-
837  src.cp().channel({"mt"}).process({"ZL"})
+
837  src.cp().channel({"mt"}).process({"ZL"})
838  .AddSyst(cb, "CMS_htt_ZLeptonFakeTau_$BIN_$ERA", "lnN",
-
839  SystMap<era, bin_id>::init
+
840  ({"7TeV"}, {6}, 2.00)
841  ({"8TeV"}, {5}, 1.26)
842  ({"8TeV"}, {6}, 1.70));
843 
-
844  src.cp().channel({"et"}).process({"ZL"})
+
844  src.cp().channel({"et"}).process({"ZL"})
845  .AddSyst(cb, "CMS_htt_ZLeptonFakeTau_$BIN_$ERA", "lnN",
-
846  SystMap<era, bin_id>::init
+
847  ({"8TeV"}, {5}, 1.30)
848  ({"8TeV"}, {6}, 1.70)
849  ({"8TeV"}, {7}, 1.74));
850 
851 
-
852  src.cp().channel({"mt"}).process({"ZL"})
+
852  src.cp().channel({"mt"}).process({"ZL"})
853  .AddSyst(cb,
-
854  "CMS_htt_ZLScale_mutau_$ERA", "shape", SystMap<>::init(1.00));
-
855  src.cp().channel({"et"}).process({"ZL"})
+
854  "CMS_htt_ZLScale_mutau_$ERA", "shape", SystMap<>::init(1.00));
+
855  src.cp().channel({"et"}).process({"ZL"})
856  .AddSyst(cb,
-
857  "CMS_htt_ZLScale_etau_$ERA", "shape", SystMap<>::init(1.00));
+
857  "CMS_htt_ZLScale_etau_$ERA", "shape", SystMap<>::init(1.00));
858 }
859 
@@ -1096,36 +1093,35 @@
988  SystMap<>::init(1.30));
989 }
990 }
-
- -
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
- - -
std::set< std::string > process_set()
- + - -
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
-
void AddSystematics_tt(CombineHarvester &cb)
-
void AddSystematics_ee_mm(CombineHarvester &cb)
+ + +
CombineHarvester & process_rgx(std::vector< std::string > const &vec, bool cond=true)
CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
- +
CombineHarvester & signals()
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > process_set()
+
void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
+ + - -
static SystMap< T... > init(std::vector< typename T::type >... input, double val)
Definition: Systematics.h:111
-
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
-
CombineHarvester & signals()
-
Definition: Algorithm.h:10
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
- +
void AddSystematics_ee_mm(CombineHarvester &cb)
+
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
void AddSystematics_et_mt(CombineHarvester &cb)
- +
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
+
void AddSystematics_tt(CombineHarvester &cb)
void AddSystematics_em(CombineHarvester &cb)
-
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+ + + + + diff --git a/_hybrid_new_grid_8md.html b/_hybrid_new_grid_8md.html index bb489b8ccb1..519385bc144 100644 --- a/_hybrid_new_grid_8md.html +++ b/_hybrid_new_grid_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/HybridNewGrid.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_json_tools_8cc.html b/_json_tools_8cc.html index 2e17983127c..f9117dd011c 100644 --- a/_json_tools_8cc.html +++ b/_json_tools_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/JsonTools.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_json_tools_8cc_source.html b/_json_tools_8cc_source.html index 89420517554..5d2eca86230 100644 --- a/_json_tools_8cc_source.html +++ b/_json_tools_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/JsonTools.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -170,14 +167,14 @@
62  return res;
63 }
64 }
-
- +
Definition: Algorithm.h:10
+
Json::Value ExtractJsonFromString(std::string const &str)
Extracts a Json::Value from the given input string.
Definition: JsonTools.cc:17
void UpdateJson(Json::Value &a, Json::Value const &b)
Updates the values in one json from the values in another.
Definition: JsonTools.cc:24
Json::Value MergedJson(int argc, char *argv[])
Create a single merged Json::Value from a mixture of json files and json-formatted strings.
Definition: JsonTools.cc:35
-
Definition: Algorithm.h:10
Json::Value ExtractJsonFromFile(std::string const &file)
Extracts a Json::Value from the specified input file.
Definition: JsonTools.cc:8
-
Json::Value ExtractJsonFromString(std::string const &str)
Extracts a Json::Value from the given input string.
Definition: JsonTools.cc:17
+ + diff --git a/_json_tools_8h.html b/_json_tools_8h.html index b8368fdbc96..77bfad25d08 100644 --- a/_json_tools_8h.html +++ b/_json_tools_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/JsonTools.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_json_tools_8h_source.html b/_json_tools_8h_source.html index 920ae5e86ee..c841844e71c 100644 --- a/_json_tools_8h_source.html +++ b/_json_tools_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/JsonTools.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -125,13 +122,13 @@
62 Json::Value MergedJson(std::vector<std::string> const& vec);
63 }
64 #endif
-
- +
Definition: Algorithm.h:10
+
Json::Value ExtractJsonFromString(std::string const &str)
Extracts a Json::Value from the given input string.
Definition: JsonTools.cc:17
void UpdateJson(Json::Value &a, Json::Value const &b)
Updates the values in one json from the values in another.
Definition: JsonTools.cc:24
Json::Value MergedJson(int argc, char *argv[])
Create a single merged Json::Value from a mixture of json files and json-formatted strings.
Definition: JsonTools.cc:35
-
Definition: Algorithm.h:10
Json::Value ExtractJsonFromFile(std::string const &file)
Extracts a Json::Value from the specified input file.
Definition: JsonTools.cc:8
-
Json::Value ExtractJsonFromString(std::string const &str)
Extracts a Json::Value from the given input string.
Definition: JsonTools.cc:17
+ + diff --git a/_limits_8md.html b/_limits_8md.html index de4209075cc..a604015a576 100644 --- a/_limits_8md.html +++ b/_limits_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/Limits.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_logging_8cc.html b/_logging_8cc.html index dabaaa113b7..071bacd545f 100644 --- a/_logging_8cc.html +++ b/_logging_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Logging.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_logging_8cc_source.html b/_logging_8cc_source.html index dc82aa61957..c7a29502bb2 100644 --- a/_logging_8cc_source.html +++ b/_logging_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Logging.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -158,7 +155,7 @@
51  printf(
52  "[Timer] %-40s Calls: %-20u Total [s]: %-20.5g Per-call [s]: %-20.5g\n",
-
53  name_.c_str(), calls_, elapsed_, elapsed_ / double(calls_));
+
53  name_.c_str(), calls_, elapsed_, elapsed_ / double(calls_));
54 }
56  ++calls_;
@@ -172,22 +169,22 @@
64 FnTimer::Token::Token(FnTimer* src) : src_(src) { src_->StartTimer(); }
65 FnTimer::Token::~Token() { src_->StopTimer(); }
66 }
-
- -
std::string FnError(std::string const &message, std::string const &file, unsigned line, std::string const &fn)
Generates an error message which includes the name of the calling function and the filename and line ...
Definition: Logging.cc:32
-
std::string GetQualififedName(std::string const &str)
Extracts the fully-qualified function name from a complete function signature.
Definition: Logging.cc:8
-
Determine the total amount of time spent in a function.
Definition: Logging.h:85
-
FnTimer(std::string name)
Definition: Logging.cc:49
-
void StartTimer()
Definition: Logging.cc:59
-
Definition: Algorithm.h:10
-
void LogLine(std::ostream &stream, std::string const &func, std::string const &message)
Writes a logging message to a given ostream.
Definition: Logging.cc:27
+ +
Token(FnTimer *src)
Definition: Logging.cc:64
+ +
Determine the total amount of time spent in a function.
Definition: Logging.h:85
void StopTimer()
Definition: Logging.cc:60
-
Token Inc()
Definition: Logging.cc:55
+
void StartTimer()
Definition: Logging.cc:59
+
FnTimer(std::string name)
Definition: Logging.cc:49
- - +
Definition: Algorithm.h:10
+
std::string GetQualififedName(std::string const &str)
Extracts the fully-qualified function name from a complete function signature.
Definition: Logging.cc:8
+
void LogLine(std::ostream &stream, std::string const &func, std::string const &message)
Writes a logging message to a given ostream.
Definition: Logging.cc:27
+
std::string FnError(std::string const &message, std::string const &file, unsigned line, std::string const &fn)
Generates an error message which includes the name of the calling function and the filename and line ...
Definition: Logging.cc:32
+ + diff --git a/_logging_8h.html b/_logging_8h.html index fb82d8aab68..2f300d0c908 100644 --- a/_logging_8h.html +++ b/_logging_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Logging.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -282,14 +279,15 @@

-Value:
+Value:
static FnTimer x(ch::GetQualififedName(__PRETTY_FUNCTION__)); \
auto y = x.Inc();
+
std::string GetQualififedName(std::string const &str)
Extracts the fully-qualified function name from a complete function signature.
Definition: Logging.cc:8

Conveniently initialise a ch::FnTimer instance.

This macro should be placed at the start of a function, e.g.:

void MyFunction() {
  LAUNCH_FUNCTION_TIMER(__timer__, __token__)
 }
-

The arguments are the names of two objects (a ch::FnTimer and a ch::FnTimer::Token) that will be created by this macro. Note that the ch::FnTimer will be assigned the current function name automatically.

+

The arguments are the names of two objects (a ch::FnTimer and a ch::FnTimer::Token) that will be created by this macro. Note that the ch::FnTimer will be assigned the current function name automatically.

Definition at line 67 of file Logging.h.

@@ -297,7 +295,6 @@

std::string GetQualififedName(std::string const &str)
Extracts the fully-qualified function name from a complete function signature.
Definition: Logging.cc:8

diff --git a/_logging_8h_source.html b/_logging_8h_source.html index 6f1e3a49c26..350591fb6fc 100644 --- a/_logging_8h_source.html +++ b/_logging_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Logging.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@

- + @@ -83,7 +80,7 @@
@@ -118,9 +115,8 @@
10 
11 #define LOGLINE(x, y) LogLine(x, __func__, y)
12 
-
13 #define FNLOG(x) x << "[" << __func__ << "] "
-
14 #define FNLOGC(x, y) if (y) x << "[" << __func__ << "] "
-
15 
+
13 #define FNLOG(x) x << "[" << __func__ << "] "
+
14 #define FNLOGC(x, y) if (y) x << "[" << __func__ << "] "
28 void LogLine(std::ostream& stream, std::string const& func,
29  std::string const& message);
30 
@@ -159,21 +155,21 @@
108 }
109 
110 #endif
-
- -
std::string FnError(std::string const &message, std::string const &file, unsigned line, std::string const &fn)
Generates an error message which includes the name of the calling function and the filename and line ...
Definition: Logging.cc:32
-
std::string GetQualififedName(std::string const &str)
Extracts the fully-qualified function name from a complete function signature.
Definition: Logging.cc:8
-
Determine the total amount of time spent in a function.
Definition: Logging.h:85
-
FnTimer(std::string name)
Definition: Logging.cc:49
-
void StartTimer()
Definition: Logging.cc:59
-
Definition: Algorithm.h:10
-
void LogLine(std::ostream &stream, std::string const &func, std::string const &message)
Writes a logging message to a given ostream.
Definition: Logging.cc:27
+
Token(FnTimer *src)
Definition: Logging.cc:64
+ +
Determine the total amount of time spent in a function.
Definition: Logging.h:85
void StopTimer()
Definition: Logging.cc:60
-
Token Inc()
Definition: Logging.cc:55
+
void StartTimer()
Definition: Logging.cc:59
+
FnTimer(std::string name)
Definition: Logging.cc:49
- +
Definition: Algorithm.h:10
+
std::string GetQualififedName(std::string const &str)
Extracts the fully-qualified function name from a complete function signature.
Definition: Logging.cc:8
+
void LogLine(std::ostream &stream, std::string const &func, std::string const &message)
Writes a logging message to a given ostream.
Definition: Logging.cc:27
+
std::string FnError(std::string const &message, std::string const &file, unsigned line, std::string const &fn)
Generates an error message which includes the name of the calling function and the filename and line ...
Definition: Logging.cc:32
+ + diff --git a/_m_s_s_m_update_model_dep.html b/_m_s_s_m_update_model_dep.html index 3b088ab56ee..64ab5a6ea2b 100644 --- a/_m_s_s_m_update_model_dep.html +++ b/_m_s_s_m_update_model_dep.html @@ -4,7 +4,7 @@ - + CombineHarvester: Model dependent Limits using MorphingMSSMUpdate @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -106,30 +103,31 @@
Model dependent Limits using MorphingMSSMUpdate
-

These instruction shall elaborate how to produce MSSM model dependent limits using the 8TeV part of the MSSM (CMS-PAS-HIG-14-029) analysis.

+

+

These instruction shall elaborate how to produce MSSM model dependent limits using the 8TeV part of the MSSM (CMS-PAS-HIG-14-029) analysis.

Creating datacards

First we create the datacards.

cd CombineHarvester/Run1BSMComb/
 MorphingMSSMUpdate
-

The created datacards contain six signals: Three for each considered production process, ggH and bbH and each of them separated in the three neutral MSSM Higgs bosons h, H and A. The particular interesting feature of the "-NoModel" creation of the datacards is that all considered signal masses are stored in the workspace instead of having a single datacard for each mass. This has the advantage that high-level morphing tools of combine could be directly used instead of having to perform manual morphing using fixed mass datacards.

+

The created datacards contain six signals: Three for each considered production process, ggH and bbH and each of them separated in the three neutral MSSM Higgs bosons h, H and A. The particular interesting feature of the "-NoModel" creation of the datacards is that all considered signal masses are stored in the workspace instead of having a single datacard for each mass. This has the advantage that high-level morphing tools of combine could be directly used instead of having to perform manual morphing using fixed mass datacards.

Scaling the workspace accordingly

The combined datacard "htt_mssm.txt" is now transfered to a MSSM model dependent workspace.

text2workspace.py -b output/mssm_nomodel/htt_mssm.txt -o output/mssm_nomodel/htt_cmb_mhmodp.root -P CombineHarvester.CombinePdfs.MSSMv2:MSSM --PO filePrefix=$CMSSW_BASE/src/auxiliaries/models/ --PO modelFiles=8TeV,out.mhmodp-8TeV-tanbHigh-nnlo.root,0
-

Therefore, a physic model "MSSMv2.py" is used. It will try to read model files from the directory auxiliaries/models/, so we need to add this path as well as the model files themselves as additional parameters. The syntax for setting the path to the models is as above. The general syntax for the model files themselves is "--PO modelFiles=ERA,FILE,VERSION". In this example, we choose the mhmod+ model for high values of tanb at 8TeV. For a list of all available options for text2workspace, run text2workspace.py -h. For upcoming 13/14TeV runs VERSION=1 should be set. After the creation the workspace "htt_cmb_mhmodp.root" contains the model information like BR/xs/masses for all considered mA/tanb which are set as parameters of interest. The six signal processes dependent on the parameters of interest.

+

Therefore, a physic model "MSSMv2.py" is used. It will try to read model files from the directory auxiliaries/models/, so we need to add this path as well as the model files themselves as additional parameters. The syntax for setting the path to the models is as above. The general syntax for the model files themselves is "--PO modelFiles=ERA,FILE,VERSION". In this example, we choose the mhmod+ model for high values of tanb at 8TeV. For a list of all available options for text2workspace, run text2workspace.py -h. For upcoming 13/14TeV runs VERSION=1 should be set. After the creation the workspace "htt_cmb_mhmodp.root" contains the model information like BR/xs/masses for all considered mA/tanb which are set as parameters of interest. The six signal processes dependent on the parameters of interest.

Calculating values

In the next step we calculate the limits in the considered MSSM model phase space.

python ../CombineTools/scripts/combineTool.py -M AsymptoticGrid scripts/mssm_asymptotic_grid.json -d output/mssm_nomodel/htt_cmb_mssm.root --job-mode 'lxbatch' --task-name 'mssm_mhodp' --sub-opts '-q 1nh' --merge=8
-

The scanned grid (=considered mA/tanb points) in the MSSM model is defined in the json file "mssm_asymptotic_grid.json". As example:

+

The scanned grid (=considered mA/tanb points) in the MSSM model is defined in the json file "mssm_asymptotic_grid.json". As example:

"opts" : "--singlePoint 1.0", "POIs" : ["mA", "tanb"], "grids" : [ ["130:150|10", "1:3|1", "0"], ["130:150|10", "4:60|20", ""] ], "hist_binning" : [87, 130, 1000, 60, 1, 60]

The "opts", "POIS" are mandatory. The "hist_binning" has no influence yet. The list of grids can be set like above. The first row, ["130:150|10", "1:3|1", "0"], defines a grid of mA=130, 140 and 150 GeV scanning tanb=1,2 and 3. The third command, here "0", sets the CLs limit to the given value instead of calculating it. This could be used to exclude some regions of the phase space which for example are known to be excluded by other theoretical constraints. If the third option is empty "" the CLs limit for the given region will be computed. Like in the second row, ["130:150|10", "4:60|20", ""], where a grid of mA=130, 140 and 150 GeV and tanb=4, 24 and 44 is scanned. Here, the lxbatch computing system is used. Eight grid points are merged in one job.

Collecting the results in a single file

After all jobs have finished, the results can be collected by simple rerunning the calculating command.

python ../CombineTools/scripts/combineTool.py -M AsymptoticGrid scripts/mssm_asymptotic_grid.json -d output/mssm_nomodel/htt_cmb_mhmodp.root --task-name 'mssm_mhodp'
-

The limits for the median expected, expected error bands and observed are stored in TGraph2D. The resulting file "asymptotic_grid.root" is needed for the plotting.

+

The limits for the median expected, expected error bands and observed are stored in TGraph2D. The resulting file "asymptotic_grid.root" is needed for the plotting.

Plotting the limits

The plotting is done be the "MSSMtanbPlot.py" script.

python ../CombineTools/scripts/MSSMtanbPlot.py --file=asymptotic_grid.root --scenario="mhmodp"
-

Again, the filename after "--file" has to be the root file which was created in the previous step. MSSMtanbPlot.py also requires a name for the scenario, which will be written in the plot. MSSMtanbPlot.py will only produce the plots as a png- and pdf file. The plotting is still work in progress.

+

Again, the filename after "--file" has to be the root file which was created in the previous step. MSSMtanbPlot.py also requires a name for the scenario, which will be written in the plot. MSSMtanbPlot.py will only produce the plots as a png- and pdf file. The plotting is still work in progress.

diff --git a/_m_s_s_m_update_no_model.html b/_m_s_s_m_update_no_model.html index 913b222204f..c92468f13a2 100644 --- a/_m_s_s_m_update_no_model.html +++ b/_m_s_s_m_update_no_model.html @@ -4,7 +4,7 @@ - + CombineHarvester: BSM Model independent Limits using MorphingMSSMUpdate @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -106,69 +103,70 @@
BSM Model independent Limits using MorphingMSSMUpdate
-

These instruction shall elaborate how to produce model independent limits using the 8TeV part of the MSSM (CMS-HIG-14-039) analysis. Below there will be given instruction how to set limits on one signal process (ggH) while another is left floating (bbH).

+

+

These instruction shall elaborate how to produce model independent limits using the 8TeV part of the MSSM (CMS-HIG-14-039) analysis. Below there will be given instruction how to set limits on one signal process (ggH) while another is left floating (bbH).

Creating datacards

The first step is to create the datacards, which will be used to produce the limit later on. To do this, go into the Folder CombineHarvester/Run1BSMComb/ and then execute MorphingMSSMUpdate. All of the programs in the following steps also need to be executed from this folder. Also make sure that all the files have been computed beforehand:

cd CombineHarvester/Run1BSMComb/
 MorphingMSSMUpdate -m MH
-

MorphingMSSMUpdate.cpp is set up similarly like Example2.cpp. More information about the datacard steps could be found in the respective example. Adding the option "-m MH" when executing MorphingMSSMUpdate is necessary to ensure that the signal types are set to only assume one single narrow resonance produced via ggH and bbH instead of distinguishing between the three neutral MSSM bosons h, A and H. It should be mentioned that CombineHarvester needs to use specific shape-rootfiles, which have been edited to reproduce the original result, since tail-fitting is not yet included in Combine Harvester. The output will be a set of datacards. The special point is that not for each mass a datacard is created. In contrast a workspace is given for the signals which contain all centrally produced mass hypothesis. In the calculating process the signal will be morphed to the chosen mass. If, for example, MC signal templates exist for m=100GeV and 200GeV one could still calculate limits for m=150GeV ("combine -m 150 ..."). The created root file, named "htt_mssm_demo.root", will be in the CombinePdfs folder. It contains the centrally available MC signals for each channel, category and mass. Per default a combined datacard "htt_mssm.txt" is created, which contains all the information of the other datacards together.

+

MorphingMSSMUpdate.cpp is set up similarly like Example2.cpp. More information about the datacard steps could be found in the respective example. Adding the option "-m MH" when executing MorphingMSSMUpdate is necessary to ensure that the signal types are set to only assume one single narrow resonance produced via ggH and bbH instead of distinguishing between the three neutral MSSM bosons h, A and H. It should be mentioned that CombineHarvester needs to use specific shape-rootfiles, which have been edited to reproduce the original result, since tail-fitting is not yet included in Combine Harvester. The output will be a set of datacards. The special point is that not for each mass a datacard is created. In contrast a workspace is given for the signals which contain all centrally produced mass hypothesis. In the calculating process the signal will be morphed to the chosen mass. If, for example, MC signal templates exist for m=100GeV and 200GeV one could still calculate limits for m=150GeV ("combine -m 150 ..."). The created root file, named "htt_mssm_demo.root", will be in the CombinePdfs folder. It contains the centrally available MC signals for each channel, category and mass. Per default a combined datacard "htt_mssm.txt" is created, which contains all the information of the other datacards together.

Scaling the workspace accordingly

Now that the datacards have been created, we can add which model we would like to study. We need to have a workspace, where the signals for each process are scaled correctly according to whatever model is selected.

text2workspace.py -b output/mssm_nomodel/htt_mssm.txt -o output/mssm_nomodel/htt_ggPhi_mssm.root -P CombineHarvester.CombinePdfs.ModelIndependent:floatingMSSMXSHiggs --PO 'modes=ggH' --PO 'ggHRange=0:20'
-

This creates a workspace "output/mssm_nomodel/htt_ggPhi_mssm.root" based on the combined datacard. The physic model "floatingMSSMXSHiggs" is built to split the signal into the processes ggH and bbH. A signal scaling parameter is assigned to one process while the other is left floating and therefore will be treated as an nuisance parameter in the fit later on. In this example we like to set a limit on the xs*BR of the ggH (to tau tau) process. The fit range of 0 to 20 is set for this parameter (be sure that the fitting range contains the minimum and has sensible ranges). Here the bbH process is left floating. By changing "ggH" to "bbH" in the text2workspace.py step it is easily possible to switch this. More advanced users might extend the physic model to be able to scale different processes (like ttH ...).

+

This creates a workspace "output/mssm_nomodel/htt_ggPhi_mssm.root" based on the combined datacard. The physic model "floatingMSSMXSHiggs" is built to split the signal into the processes ggH and bbH. A signal scaling parameter is assigned to one process while the other is left floating and therefore will be treated as an nuisance parameter in the fit later on. In this example we like to set a limit on the xs*BR of the ggH (to tau tau) process. The fit range of 0 to 20 is set for this parameter (be sure that the fitting range contains the minimum and has sensible ranges). Here the bbH process is left floating. By changing "ggH" to "bbH" in the text2workspace.py step it is easily possible to switch this. More advanced users might extend the physic model to be able to scale different processes (like ttH ...).

Calculating values

Now that we have created the workspace htt_ggPhi_mssm.root, which can again be found in the output-folder, we now run combineTool.py, which will lead to the calculation all the values, which will later be used to create a plot.

python ../CombineTools/scripts/combineTool.py -m 100:200:20,90,100,250:500:50,600:1000:100 -M Asymptotic --boundlist $CMSSW_BASE/src/CombineHarvester/CombinePdfs/scripts/mssm_ggh_boundaries.json output/mssm_nomodel/htt_ggPhi_mssm.root --freezeNuisances MH --setPhysicsModelParameters r_ggH=0
-

This program by itself only creates lists of jobs for the program "combine". These jobs can be run interactively on your own computer, or they can be sent somewhere else by using the option "--job-mode" (for example –job-mode 'lxbatch' when using CERN's computing power). To avoid sending too many jobs, we may use "--merge" to include a certain number of combine calls into one job (for example –merge=8 will include up to 8 combine calls into one single job). Other than that, we need to specify which method to use, as well as the workspace. The specification of what method to use is done with the option "-M". In this example, the asymptotic limits are being calculated. The mass-range can be include with the option "-m". In this example, 19 different combine calls will be produced for the Higgs masses as seen at the bottom of this example. Since sensible boundaries on the parameter of interest (here ggH) can be mass dependent an important option can be to add a list of boundaries of the POI for each mass via a extern json fil, here "scripts/mssm_ggh_boundaries.json". This will set the range of relevant physics model parameters, depending on the production process and the mass. The option "--freezeNuisances MH" is important to fix the hypothetical Higgs mass of the considered process to the one selected via the option "-m" instead of letting it freely floating in the fitting process.

+

This program by itself only creates lists of jobs for the program "combine". These jobs can be run interactively on your own computer, or they can be sent somewhere else by using the option "--job-mode" (for example –job-mode 'lxbatch' when using CERN's computing power). To avoid sending too many jobs, we may use "--merge" to include a certain number of combine calls into one job (for example –merge=8 will include up to 8 combine calls into one single job). Other than that, we need to specify which method to use, as well as the workspace. The specification of what method to use is done with the option "-M". In this example, the asymptotic limits are being calculated. The mass-range can be include with the option "-m". In this example, 19 different combine calls will be produced for the Higgs masses as seen at the bottom of this example. Since sensible boundaries on the parameter of interest (here ggH) can be mass dependent an important option can be to add a list of boundaries of the POI for each mass via a extern json fil, here "scripts/mssm_ggh_boundaries.json". This will set the range of relevant physics model parameters, depending on the production process and the mass. The option "--freezeNuisances MH" is important to fix the hypothetical Higgs mass of the considered process to the one selected via the option "-m" instead of letting it freely floating in the fitting process.

Collecting the results in a single file

Once all the jobs sent in the previous step and done, we will then collect all relevant data from the created root files into a single file. To do this, we will run combineTool.py again, but time with the method "CollectLimits", as well as different options.

python ../CombineTools/scripts/combineTool.py -M CollectLimits -i higgsCo* -o mssm.json
-

The option "-i" is used to include all root files which have been previously created. These filenames usually all begin with "higgsCombine*". The filename specified after "-o" is the name of the json file which will be created. This json file contains all necessary, computated values from the root files, which will be needed to plot the limit. These include the values for the observation, expectation and the -2, -1, +1, +2 sigma uncertainties.

+

The option "-i" is used to include all root files which have been previously created. These filenames usually all begin with "higgsCombine*". The filename specified after "-o" is the name of the json file which will be created. This json file contains all necessary, computated values from the root files, which will be needed to plot the limit. These include the values for the observation, expectation and the -2, -1, +1, +2 sigma uncertainties.

Plotting the limits

Finally we can produce the plot. To do this, we use the program "plotBSMxsBRLimit.py".

python ../CombineTools/scripts/plotBSMxsBRLimit.py --file=mssm.json
-

The filename specified as "--file" is the json file produced in the previous step. We may also add more options regarding the aesthetics of the plot, such as changing the range of the x- and y-axis, or enabling logarithmic scaling. Executing this program along with the additional parameters will create the desired plot as a png- and pdf file. It will also create a textfile "mssm_limit_table.txt", which contains a list of the exact values for all mass points. The limits of the described example should agree with the following numbers:

+

The filename specified as "--file" is the json file produced in the previous step. We may also add more options regarding the aesthetics of the plot, such as changing the range of the x- and y-axis, or enabling logarithmic scaling. Executing this program along with the additional parameters will create the desired plot as a png- and pdf file. It will also create a textfile "mssm_limit_table.txt", which contains a list of the exact values for all mass points. The limits of the described example should agree with the following numbers:

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
mass minus2sigma minus1sigma expected plus1sigma plus2sigma observed
mass minus2sigma minus1sigma expected plus1sigma plus2sigma observed
90.0 7.44689941406 10.4886741638 15.3125 22.3316726685 31.1344871521 21.4247200433
90.0 7.44689941406 10.4886741638 15.3125 22.3316726685 31.1344871521 21.4247200433
100.0 6.0858001709 8.5330581665 12.4140625 18.1046066284 25.0876998901 17.6605401733
100.0 6.0858001709 8.5330581665 12.4140625 18.1046066284 25.0876998901 17.6605401733
120.0 1.18392789364 1.57787442207 2.17265629768 3.03002619743 4.02200269699 2.97035384799
120.0 1.18392789364 1.57787442207 2.17265629768 3.03002619743 4.02200269699 2.97035384799
130.0 0.639678955078 0.856723308563 1.1953125 1.68129837513 2.2536046505 1.59457176432
130.0 0.639678955078 0.856723308563 1.1953125 1.68129837513 2.2536046505 1.59457176432
140.0 0.438079833984 0.584083616734 0.815625011921 1.14398777485 1.52501606941 0.94770346896
140.0 0.438079833984 0.584083616734 0.815625011921 1.14398777485 1.52501606941 0.94770346896
160.0 0.253028869629 0.337358653545 0.47109374404 0.660751521587 0.886857688427 0.460536925886
160.0 0.253028869629 0.337358653545 0.47109374404 0.660751521587 0.886857688427 0.460536925886
180.0 0.180056750774 0.240920364857 0.332812488079 0.466799587011 0.626536250114 0.302229212372
180.0 0.180056750774 0.240920364857 0.332812488079 0.466799587011 0.626536250114 0.302229212372
200.0 0.143707275391 0.19228386879 0.265625 0.370445460081 0.49172270298 0.227834272278
200.0 0.143707275391 0.19228386879 0.265625 0.370445460081 0.49172270298 0.227834272278
250.0 0.0768411234021 0.102051369846 0.142031252384 0.198079377413 0.264753729105 0.117494322717
250.0 0.0768411234021 0.102051369846 0.142031252384 0.198079377413 0.264753729105 0.117494322717
300.0 0.0484149158001 0.0645136460662 0.090468749404 0.126169368625 0.168638512492 0.06854323815
300.0 0.0484149158001 0.0645136460662 0.090468749404 0.126169368625 0.168638512492 0.06854323815
350.0 0.0495315566659 0.0657380968332 0.0886718779802 0.118715122342 0.152319088578 0.0842439601436
350.0 0.0495315566659 0.0657380968332 0.0886718779802 0.118715122342 0.152319088578 0.0842439601436
400.0 0.0397595204413 0.052680041641 0.0721874982119 0.0972210913897 0.12731602788 0.0725939537161
400.0 0.0397595204413 0.052680041641 0.0721874982119 0.0972210913897 0.12731602788 0.0725939537161
450.0 0.0276245102286 0.035754583776 0.0484374985099 0.06581415236 0.086501725018 0.0503201500801
450.0 0.0276245102286 0.035754583776 0.0484374985099 0.06581415236 0.086501725018 0.0503201500801
500.0 0.0173510741442 0.0233783721924 0.0321874991059 0.0452741757035 0.0613017454743 0.0379442905513
500.0 0.0173510741442 0.0233783721924 0.0321874991059 0.0452741757035 0.0613017454743 0.0379442905513
600.0 0.0101513667032 0.0140254208818 0.019687499851 0.02816282399 0.0385656952858 0.0255840519774
600.0 0.0101513667032 0.0140254208818 0.019687499851 0.02816282399 0.0385656952858 0.0255840519774
700.0 0.00771972676739 0.00984832737595 0.0145312501118 0.0205551572144 0.0290479976684 0.0209467474855
700.0 0.00771972676739 0.00984832737595 0.0145312501118 0.0205551572144 0.0290479976684 0.0209467474855
800.0 0.0062255859375 0.00794219970703 0.01171875 0.0165767390281 0.0222346615046 0.0163398869015
800.0 0.0062255859375 0.00794219970703 0.01171875 0.0165767390281 0.0222346615046 0.0163398869015
900.0 0.00439453125 0.00567626953125 0.0078125 0.0113002872095 0.0163606926799 0.0107711296097
900.0 0.00439453125 0.00567626953125 0.0078125 0.0113002872095 0.0163606926799 0.0107711296097
1000.0 0.00259765610099 0.00385009753518 0.00593749992549 0.00858821813017 0.0124341268092 0.008082145785341
1000.0 0.00259765610099 0.00385009753518 0.00593749992549 0.00858821813017 0.0124341268092 0.008082145785341
diff --git a/_m_s_s_m_yield_table_8cpp.html b/_m_s_s_m_yield_table_8cpp.html index f9b7ac945ca..c12eeba23c2 100644 --- a/_m_s_s_m_yield_table_8cpp.html +++ b/_m_s_s_m_yield_table_8cpp.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/bin/MSSMYieldTable.cpp File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_m_s_s_m_yield_table_8cpp_source.html b/_m_s_s_m_yield_table_8cpp_source.html index 3c15d7c5806..137a38a5ebe 100644 --- a/_m_s_s_m_yield_table_8cpp_source.html +++ b/_m_s_s_m_yield_table_8cpp_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/bin/MSSMYieldTable.cpp Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -307,7 +304,7 @@
199 
200  for (unsigned i = 0; i < n_cols; ++i) {
201  ch::CombineHarvester tmp_cmb =
-
202  std::move(cmb.cp().era({col_info[i].era}).bin_id(col_info[i].cats_int));
+
202  std::move(cmb.cp().era({col_info[i].era}).bin_id(col_info[i].cats_int));
203  // tmp_cmb.cp().PrintAll();
204  data_yields[i] = tmp_cmb.cp().GetObservedRate();
205  sig_yields[i] = tmp_cmb.cp().process(signal_procs).GetRate();
@@ -412,40 +409,41 @@
304 
305  return 0;
306 }
-
- -
string era
-
double rate() const
Definition: Process.h:25
-
void ForEachProc(Function func)
- -
std::vector< ch::Parameter > ExtractFitParameters(RooFitResult const &res)
Definition: Utilities.cc:46
-
void ForEachObj(Function func)
-
vector< string > procs
-
double lumi
- -
vector< string > cats_str
+ +
int main(int argc, char *argv[])
-
BkgInfo(string const &l, vector< string > const &p)
-
string label
- -
void UpdateParameters(std::vector< ch::Parameter > const &params)
+ + +
CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
+
CombineHarvester & signals()
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
void ForEachProc(Function func)
+
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
+
void UpdateParameters(std::vector< ch::Parameter > const &params)
-
string label
+
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 cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
void ForEachObj(Function func)
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
+ +
void set_rate(double const &rate)
Definition: Process.h:24
-
int main(int argc, char *argv[])
-
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
-
CombineHarvester & signals()
-
vector< int > cats_int
+
double rate() const
Definition: Process.h:25
+
std::vector< ch::Parameter > ExtractFitParameters(RooFitResult const &res)
Definition: Utilities.cc:46
void SetFromBinName(ch::Object *input, std::string parse_rules)
Definition: Utilities.cc:96
-
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)
- - -
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
BkgInfo(string const &l, vector< string > const &p)
+
string label
+
vector< string > procs
+ +
vector< string > cats_str
+
string era
+
double lumi
+
vector< int > cats_int
+
string label
+ + diff --git a/_main_8md.html b/_main_8md.html index 383e3f1de7f..25b0876711a 100644 --- a/_main_8md.html +++ b/_main_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/Main.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_make_unique_8h.html b/_make_unique_8h.html index 059f3d3f1cb..e84ae78f300 100644 --- a/_make_unique_8h.html +++ b/_make_unique_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/MakeUnique.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_make_unique_8h_source.html b/_make_unique_8h_source.html index 1aac0602605..91807f33c21 100644 --- a/_make_unique_8h_source.html +++ b/_make_unique_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/MakeUnique.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -119,10 +116,10 @@
11 }
12 
13 #endif
+
Definition: Algorithm.h:10
+
std::unique_ptr< T > make_unique(Args &&... args)
Definition: MakeUnique.h:8
-
std::unique_ptr< T > make_unique(Args &&... args)
Definition: MakeUnique.h:8
-
Definition: Algorithm.h:10
diff --git a/_model_indep_hhh_a_zh.html b/_model_indep_hhh_a_zh.html index 82ac3e8bdab..674fede9a76 100644 --- a/_model_indep_hhh_a_zh.html +++ b/_model_indep_hhh_a_zh.html @@ -4,7 +4,7 @@ - + CombineHarvester: BSM Model independent Limits using MorphingHhh or MorphingAZh @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -106,13 +103,14 @@
BSM Model independent Limits using MorphingHhh or MorphingAZh
-

The model independent limits for the H->hh and A->Zh analyses (HIG-14-034) are slightly simpler than for the MSSM H->tautau analysis, since only one signal process is considered and hence no profiling is required. This removes the need for any kind of physics model at the text2workspace step.

+

+

The model independent limits for the H->hh and A->Zh analyses (HIG-14-034) are slightly simpler than for the MSSM H->tautau analysis, since only one signal process is considered and hence no profiling is required. This removes the need for any kind of physics model at the text2workspace step.

Creating datacards

The first step is to create the datacards, which will be used to produce the limit later on. To do this, go into the Folder CombineHarvester/Run1BSMComb/ and then execute MorphingHhh or MorphingAZh. All of the programs in the following steps also need to be executed from this folder. Also make sure that all the files have been compiled beforehand:

cd CombineHarvester/Run1BSMComb/
 MorphingAZh
 MorphingHhh
-

MorphingHhh.cpp and MorphingAZh.cpp are setup similarly to Example2 and MorphingMSSMUpdate as documented previously. No additional option -m MH is needed as in the case of the MSSMUpdate cards because there is only one Higgs boson considered anyway for these analyses.

+

MorphingHhh.cpp and MorphingAZh.cpp are setup similarly to Example2 and MorphingMSSMUpdate as documented previously. No additional option -m MH is needed as in the case of the MSSMUpdate cards because there is only one Higgs boson considered anyway for these analyses.

Creating the workspace

Now that the datacards have been created, we can create a workspace as follows:

diff --git a/_morph_functions_8cc.html b/_morph_functions_8cc.html index c4de602c71f..f1d0b8e818d 100644 --- a/_morph_functions_8cc.html +++ b/_morph_functions_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/src/MorphFunctions.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- +
@@ -83,7 +80,7 @@
diff --git a/_morph_functions_8cc_source.html b/_morph_functions_8cc_source.html index 8ebd07ab9cb..021d23f1f88 100644 --- a/_morph_functions_8cc_source.html +++ b/_morph_functions_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/src/MorphFunctions.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -165,7 +162,7 @@
60  // float-convertible, as an exception will be thrown by lexical_cast if not.
61  std::sort(m_str_vec.begin(), m_str_vec.end(),
62  [](string const& s1, string const& s2) {
-
63  return lexical_cast<double>(s1) < lexical_cast<double>(s2);
+
63  return lexical_cast<double>(s1) < lexical_cast<double>(s2);
64  });
65 
66  // Convert the sorted vector of mass strings to an actual vector of doubles
@@ -180,10 +177,10 @@
76  // ss = "shape systematic"
77  // Make a list of the names of shape systematics affecting this process
78  vector<string> ss_vec =
-
79  Set2Vec(cb_bp.cp().syst_type({"shape"}).syst_name_set());
+
79  Set2Vec(cb_bp.cp().syst_type({"shape"}).syst_name_set());
80  // Now check if all shape systematics are present for all mass points
81  for (auto const& s : m_str_vec) {
-
82  if (cb_bp.cp().syst_type({"shape"}).mass({s}).syst_name_set().size() !=
+
82  if (cb_bp.cp().syst_type({"shape"}).mass({s}).syst_name_set().size() !=
83  ss_vec.size()) {
84  throw std::runtime_error(FNERROR(
85  "Some mass points do not have the full set of shape systematics, "
@@ -197,7 +194,7 @@
93  // Make a list of the regular lnN normalisation systematics affecting this
94  // process
95  vector<string> ls_vec =
-
96  Set2Vec(cb_bp.cp().syst_type({"lnN"}).syst_name_set());
+
96  Set2Vec(cb_bp.cp().syst_type({"lnN"}).syst_name_set());
97  unsigned ls = ls_vec.size(); // number of lnN systematics
98 
99  // Create a bunch of empty arrays to store the information we need in a more
@@ -601,13 +598,13 @@
501  // The x-axis variable has to be called "CMS_th1x", as this is what
502  // text2workspace will use for all the normal processes
503  RooRealVar xvar("CMS_th1x", "CMS_th1x", 0,
-
504  static_cast<float>(data_hist.GetNbinsX()));
+
504  static_cast<float>(data_hist.GetNbinsX()));
505  xvar.setBins(data_hist.GetNbinsX());
506 
507  // Create a second x-axis variable, named specific to the bin, that will be
508  // for the finer-binned input
509  RooRealVar morph_xvar(("CMS_th1x_"+bin).c_str(), "", 0,
-
510  static_cast<float>(proc_hist.GetNbinsX()));
+
510  static_cast<float>(proc_hist.GetNbinsX()));
511  // We're not going to need roofit to evaluate anything as a function of this
512  // morphing x-axis variable, so we set it constant
513  morph_xvar.setConstant();
@@ -694,15 +691,15 @@
598  // will now be read from our norm object
599  cb.ForEachProc([&](ch::Process * p) {
600  if (p->bin() == bin && p->process() == process) {
-
601  p->set_mass("*");
-
602  p->set_shape(nullptr, false);
-
603  p->set_rate(1.0);
+
601  p->set_mass("*");
+
602  p->set_shape(nullptr, false);
+
603  p->set_rate(1.0);
604  }
605  });
606  // Just declare the mass to be generic for the remaining systematics
607  cb.ForEachSyst([&](ch::Systematic * n) {
608  if (n->bin() == bin && n->process() == process) {
-
609  n->set_mass("*");
+
609  n->set_mass("*");
610  }
611  });
612 
@@ -722,7 +719,7 @@
626 
627 void MakeMorphDebugPlots(RooMorphingPdf* pdf, RooAbsReal* mass,
628  std::vector<double> const& masses, TFile* f, TH1 *ref_bins) {
-
629  RooRealVar *rrv = dynamic_cast<RooRealVar*>(mass);
+
629  RooRealVar *rrv = dynamic_cast<RooRealVar*>(mass);
630  if (!rrv) return;
631  f->cd();
632  f->mkdir(pdf->GetName());
@@ -780,43 +777,41 @@
684  f->cd();
685 }
686 }
-
- -
CombineHarvester & FilterSysts(Function func)
-
void ForEachProc(Function func)
-
bool asymm() const
Definition: Systematic.h:36
+ +
#define FNERROR(x)
Definition: Logging.h:9
+ + +
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
+
void ForEachSyst(Function func)
+ +
void ForEachProc(Function func)
+
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
CombineHarvester & FilterSysts(Function func)
+
CombineHarvester & FilterProcs(Function func)
+
std::set< std::string > syst_name_set()
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
+
virtual std::string const & process() const
Definition: Object.h:20
virtual std::string const & bin() const
Definition: Object.h:17
-
#define FNERROR(x)
Definition: Logging.h:9
-
virtual void set_mass(std::string const &mass)
Definition: Object.h:37
-
TH1F AsTH1F(TH1 const *hist)
-
CombineHarvester & FilterProcs(Function func)
-
double value_u() const
Definition: Systematic.h:27
- -
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Process.cc:81
- -
void MakeMorphDebugPlots(RooMorphingPdf *pdf, RooAbsReal *mass, std::vector< double > const &masses, TFile *f, TH1 *ref_bins=nullptr)
- -
void set_rate(double const &rate)
Definition: Process.h:24
virtual std::string const & mass() const
Definition: Object.h:38
- + + +
double value_u() const
Definition: Systematic.h:28
+
std::string const & type() const
Definition: Systematic.h:25
+
bool asymm() const
Definition: Systematic.h:37
+
std::string const & name() const
Definition: Systematic.h:22
+
double value_d() const
Definition: Systematic.h:31
Definition: Algorithm.h:10
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
-
double value_d() const
Definition: Systematic.h:30
- - -
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
- -
void ForEachSyst(Function func)
-
std::string const & name() const
Definition: Systematic.h:21
std::string 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]
-
virtual std::string const & process() const
Definition: Object.h:20
- -
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
std::string const & type() const
Definition: Systematic.h:24
+
void MakeMorphDebugPlots(RooMorphingPdf *pdf, RooAbsReal *mass, std::vector< double > const &masses, TFile *f, TH1 *ref_bins=nullptr)
TH1F RebinHist(TH1F const &hist)
Definition: Utilities.cc:170
+
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
+
TH1F AsTH1F(TH1 const *hist)
+ + + diff --git a/_morph_functions_8h.html b/_morph_functions_8h.html index 59ce27e2768..c56dc192726 100644 --- a/_morph_functions_8h.html +++ b/_morph_functions_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/interface/MorphFunctions.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_morph_functions_8h_source.html b/_morph_functions_8h_source.html index ca203d0640e..071f7da878b 100644 --- a/_morph_functions_8h_source.html +++ b/_morph_functions_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/interface/MorphFunctions.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -127,8 +124,8 @@
19 
20 inline TH1F AsTH1F(TH1 const* hist) {
21  TH1F res;
-
22  TH1F const* test_f = dynamic_cast<TH1F const*>(hist);
-
23  TH1D const* test_d = dynamic_cast<TH1D const*>(hist);
+
22  TH1F const* test_f = dynamic_cast<TH1F const*>(hist);
+
23  TH1D const* test_d = dynamic_cast<TH1D const*>(hist);
24  if (test_f) {
25  test_f->Copy(res);
26  } else if (test_d) {
@@ -145,21 +142,21 @@
37  RooAbsReal& mass_var, std::string norm_postfix,
38  bool allow_morph, bool verbose, bool force_template_limit=false, TFile * file = nullptr);
39 
-
40 TGraph GraphFromSpline(RooSpline1D const* spline);
+
40 TGraph GraphFromSpline(RooSpline1D const* spline);
41 
42 void MakeMorphDebugPlots(RooMorphingPdf* pdf, RooAbsReal* mass,
43  std::vector<double> const& masses, TFile* f, TH1 *ref_bins = nullptr);
44 }
45 
46 #endif
-
- -
TH1F AsTH1F(TH1 const *hist)
-
void MakeMorphDebugPlots(RooMorphingPdf *pdf, RooAbsReal *mass, std::vector< double > const &masses, TFile *f, TH1 *ref_bins=nullptr)
-
Definition: Algorithm.h:10
-
TGraph GraphFromSpline(RooSpline1D const *spline)
+
Definition: Algorithm.h:10
std::string 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]
+
void MakeMorphDebugPlots(RooMorphingPdf *pdf, RooAbsReal *mass, std::vector< double > const &masses, TFile *f, TH1 *ref_bins=nullptr)
+
TGraph GraphFromSpline(RooSpline1D const *spline)
+
TH1F AsTH1F(TH1 const *hist)
+ + diff --git a/_object_8cc.html b/_object_8cc.html index a36b1e32fc9..2fd78366763 100644 --- a/_object_8cc.html +++ b/_object_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Object.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_object_8cc_source.html b/_object_8cc_source.html index 2991d061ffb..acb38fe9d76 100644 --- a/_object_8cc_source.html +++ b/_object_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Object.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -123,7 +120,7 @@
15 
17 
-
18 void swap(Object& first, Object& second) {
+
18 void swap(Object& first, Object& second) {
19  using std::swap;
20  swap(first.bin_, second.bin_);
21  swap(first.process_, second.process_);
@@ -173,18 +170,18 @@
65  return (*this);
66 }
67 }
-
- + +
virtual void set_attribute(std::string const &attr_label, std::string const &attr_value)
Definition: Object.cc:55
-
Object()
Definition: Object.cc:5
+
Object & operator=(Object other)
Definition: Object.cc:63
friend void swap(Object &first, Object &second)
Definition: Object.cc:18
+
Object()
Definition: Object.cc:5
+
virtual ~Object()
Definition: Object.cc:16
Definition: Algorithm.h:10
- -
Object & operator=(Object other)
Definition: Object.cc:63
+
void swap(CombineHarvester &first, CombineHarvester &second)
void swap(Object &first, Object &second)
Definition: Object.cc:18
-
void swap(CombineHarvester &first, CombineHarvester &second)
- -
virtual ~Object()
Definition: Object.cc:16
+ + diff --git a/_object_8h.html b/_object_8h.html index cd8c300a9c7..831ca1ca243 100644 --- a/_object_8h.html +++ b/_object_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Object.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_object_8h_source.html b/_object_8h_source.html index 35853aa431f..16e01961fb4 100644 --- a/_object_8h_source.html +++ b/_object_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Object.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -149,7 +146,7 @@
41  virtual void delete_attribute(std::string const& attr_label) { attributes_.erase(attr_label); }
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) : "" ; }
+
44  virtual std::string const attribute(std::string const& attr_label) const { return attributes_.count(attr_label) >0 ? attributes_.at(attr_label) : "" ; }
45 
46  private:
47  std::string bin_;
@@ -166,39 +163,39 @@
58 }
59 
60 #endif
-
- -
virtual void set_attribute(std::string const &attr_label, std::string const &attr_value)
Definition: Object.cc:55
+ +
virtual void set_analysis(std::string const &analysis)
Definition: Object.h:25
virtual void set_process(std::string const &process)
Definition: Object.h:19
+
virtual std::string const attribute(std::string const &attr_label) const
Definition: Object.h:44
+
virtual void set_mass(std::string const &mass)
Definition: Object.h:37
+
virtual std::string const & process() const
Definition: Object.h:20
virtual void set_bin(std::string const &bin)
Definition: Object.h:16
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual void set_attribute(std::string const &attr_label, std::string const &attr_value)
Definition: Object.cc:55
+
Object & operator=(Object other)
Definition: Object.cc:63
virtual void set_all_attributes(std::map< std::string, std::string > const &attrs_)
Definition: Object.h:42
+
virtual int bin_id() const
Definition: Object.h:35
+
friend void swap(Object &first, Object &second)
Definition: Object.cc:18
+
virtual std::string const & analysis() const
Definition: Object.h:26
virtual std::string const & era() const
Definition: Object.h:29
-
virtual std::string const & bin() const
Definition: Object.h:17
- -
void set_signal(bool const &signal)
Definition: Object.h:22
-
virtual void set_mass(std::string const &mass)
Definition: Object.h:37
-
virtual std::string const & channel() const
Definition: Object.h:32
-
Object()
Definition: Object.cc:5
- -
virtual std::map< std::string, std::string > const & all_attributes() const
Definition: Object.h:43
-
virtual std::string const & analysis() const
Definition: Object.h:26
virtual std::string const & mass() const
Definition: Object.h:38
-
virtual void delete_attribute(std::string const &attr_label)
Definition: Object.h:41
-
friend void swap(Object &first, Object &second)
Definition: Object.cc:18
- -
Definition: Algorithm.h:10
-
virtual void set_analysis(std::string const &analysis)
Definition: Object.h:25
+
virtual ~Object()
Definition: Object.cc:16
bool signal() const
Definition: Object.h:23
-
virtual int bin_id() const
Definition: Object.h:35
-
virtual void set_bin_id(int const &bin_id)
Definition: Object.h:34
- -
Object & operator=(Object other)
Definition: Object.cc:63
virtual void set_era(std::string const &era)
Definition: Object.h:28
-
virtual std::string const & process() const
Definition: Object.h:20
-
virtual const std::string attribute(std::string const &attr_label) const
Definition: Object.h:44
+
void set_signal(bool const &signal)
Definition: Object.h:22
+
virtual std::string const & channel() const
Definition: Object.h:32
+
virtual std::map< std::string, std::string > const & all_attributes() const
Definition: Object.h:43
virtual void set_channel(std::string const &channel)
Definition: Object.h:31
-
virtual ~Object()
Definition: Object.cc:16
+
virtual void set_bin_id(int const &bin_id)
Definition: Object.h:34
+
virtual void delete_attribute(std::string const &attr_label)
Definition: Object.h:41
+ +
Definition: Algorithm.h:10
+ + + + + diff --git a/_observation_8cc.html b/_observation_8cc.html index 3055d87e5cb..b535dc39719 100644 --- a/_observation_8cc.html +++ b/_observation_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Observation.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_observation_8cc_source.html b/_observation_8cc_source.html index accc3a9a881..5c446841f4f 100644 --- a/_observation_8cc_source.html +++ b/_observation_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Observation.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -122,7 +119,7 @@
14  % val.bin_id()
15  % "data_obs"
16  % val.rate()
-
17  % (bool(val.shape()) || bool(val.data()));
+
17  % (bool(val.shape()) || bool(val.data()));
18 }
19 }
20 
@@ -138,9 +135,9 @@
30 
32 
-
33 void swap(Observation& first, Observation& second) {
+
33 void swap(Observation& first, Observation& second) {
34  using std::swap;
-
35  swap(static_cast<Object&>(first), static_cast<Object&>(second));
+
35  swap(static_cast<Object&>(first), static_cast<Object&>(second));
36  swap(first.rate_, second.rate_);
37  swap(first.shape_, second.shape_);
38  swap(first.data_, second.data_);
@@ -152,7 +149,7 @@
44  data_(other.data_) {
45  TH1* h = nullptr;
46  if (other.shape_) {
-
47  h = dynamic_cast<TH1*>(other.shape_->Clone());
+
47  h = dynamic_cast<TH1*>(other.shape_->Clone());
48  h->SetDirectory(0);
49  }
50  shape_ = std::unique_ptr<TH1>(h);
@@ -196,12 +193,12 @@
88 }
89 
90 void Observation::set_shape(TH1 const& shape, bool set_rate) {
-
91  set_shape(std::unique_ptr<TH1>(static_cast<TH1*>(shape.Clone())), set_rate);
+
91  set_shape(std::unique_ptr<TH1>(static_cast<TH1*>(shape.Clone())), set_rate);
92 }
93 
94 std::unique_ptr<TH1> Observation::ClonedShape() const {
95  if (!shape_) return std::unique_ptr<TH1>();
-
96  std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_->Clone()));
+
96  std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_->Clone()));
97  res->SetDirectory(0);
98  return res;
99 }
@@ -221,8 +218,8 @@
113  TH1F res;
114  // Need to get the shape as a concrete type (TH1F or TH1D)
115  // A nice way to do this is just to use TH1D::Copy into a fresh TH1F
-
116  TH1F const* test_f = dynamic_cast<TH1F const*>(this->shape());
-
117  TH1D const* test_d = dynamic_cast<TH1D const*>(this->shape());
+
116  TH1F const* test_f = dynamic_cast<TH1F const*>(this->shape());
+
117  TH1D const* test_d = dynamic_cast<TH1D const*>(this->shape());
118  if (test_f) {
119  test_f->Copy(res);
120  } else if (test_d) {
@@ -249,43 +246,43 @@
141  return ::format_obs(*this).str();
142 }
143 
-
144 std::ostream& operator<< (std::ostream &out, Observation const& val) {
+
144 std::ostream& operator<< (std::ostream &out, Observation const& val) {
145  out << ::format_obs(val);
146  return out;
147 }
148 }
-
- -
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
+ +
#define FNERROR(x)
Definition: Logging.h:9
+ +
virtual void set_process(std::string const &process)
Definition: Object.h:19
-
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Observation.cc:66
-
void set_rate(double const &rate)
Definition: Observation.h:20
-
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Observation.cc:101
-
virtual std::string const & era() const
Definition: Object.h:29
-
double rate() const
Definition: Observation.h:21
virtual std::string const & bin() const
Definition: Object.h:17
-
#define FNERROR(x)
Definition: Logging.h:9
-
virtual std::string const & channel() const
Definition: Object.h:32
+
virtual int bin_id() const
Definition: Object.h:35
virtual std::string const & analysis() const
Definition: Object.h:26
+
virtual std::string const & era() const
Definition: Object.h:29
virtual std::string const & mass() const
Definition: Object.h:38
- -
Definition: Algorithm.h:10
-
friend void swap(Observation &first, Observation &second)
Definition: Observation.cc:33
-
virtual int bin_id() const
Definition: Object.h:35
- +
virtual std::string const & channel() const
Definition: Object.h:32
+ +
void set_rate(double const &rate)
Definition: Observation.h:20
+
TH1F ShapeAsTH1F() const
Definition: Observation.cc:108
+
TH1 const * shape() const
Definition: Observation.h:27
+
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Observation.cc:101
static std::ostream & PrintHeader(std::ostream &out)
Definition: Observation.cc:128
-
std::string to_string() const
Definition: Observation.cc:140
-
RooAbsData const * data() const
Definition: Observation.h:35
- -
void swap(CombineHarvester &first, CombineHarvester &second)
Observation & operator=(Observation other)
Definition: Observation.cc:61
- +
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Observation.cc:66
+
RooAbsData const * data() const
Definition: Observation.h:35
+
std::string to_string() const
Definition: Observation.cc:140
std::unique_ptr< TH1 > ClonedShape() const
Definition: Observation.cc:94
+
friend void swap(Observation &first, Observation &second)
Definition: Observation.cc:33
+
double rate() const
Definition: Observation.h:21
+ +
Definition: Algorithm.h:10
+
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
void swap(Observation &first, Observation &second)
Definition: Observation.cc:33
-
TH1F ShapeAsTH1F() const
Definition: Observation.cc:108
- -
TH1 const * shape() const
Definition: Observation.h:27
+
void swap(CombineHarvester &first, CombineHarvester &second)
+ + diff --git a/_observation_8h.html b/_observation_8h.html index 9eb20924e5f..6f53d3ca17f 100644 --- a/_observation_8h.html +++ b/_observation_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Observation.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_observation_8h_source.html b/_observation_8h_source.html index ff5e8dc0a0f..3dc1eeb2efa 100644 --- a/_observation_8h_source.html +++ b/_observation_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Observation.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -156,29 +153,29 @@
48 }
49 
50 #endif
-
- -
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Observation.cc:66
-
void set_rate(double const &rate)
Definition: Observation.h:20
-
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Observation.cc:101
-
double rate() const
Definition: Observation.h:21
-
friend std::ostream & operator<<(std::ostream &out, Observation const &val)
Definition: Observation.cc:144
- -
Definition: Algorithm.h:10
-
void set_data(RooAbsData *data)
Definition: Observation.h:34
-
friend void swap(Observation &first, Observation &second)
Definition: Observation.cc:33
+ + +
void set_rate(double const &rate)
Definition: Observation.h:20
+
TH1F ShapeAsTH1F() const
Definition: Observation.cc:108
+
TH1 const * shape() const
Definition: Observation.h:27
+
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Observation.cc:101
static std::ostream & PrintHeader(std::ostream &out)
Definition: Observation.cc:128
-
std::string to_string() const
Definition: Observation.cc:140
-
RooAbsData const * data() const
Definition: Observation.h:35
Observation & operator=(Observation other)
Definition: Observation.cc:61
- +
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Observation.cc:66
+
RooAbsData const * data() const
Definition: Observation.h:35
+
std::string to_string() const
Definition: Observation.cc:140
std::unique_ptr< TH1 > ClonedShape() const
Definition: Observation.cc:94
-
TH1F ShapeAsTH1F() const
Definition: Observation.cc:108
- -
TH1 const * shape() const
Definition: Observation.h:27
+
void set_data(RooAbsData *data)
Definition: Observation.h:34
+
friend void swap(Observation &first, Observation &second)
Definition: Observation.cc:33
+
friend std::ostream & operator<<(std::ostream &out, Observation const &val)
Definition: Observation.cc:144
+
double rate() const
Definition: Observation.h:21
+ +
Definition: Algorithm.h:10
+ + diff --git a/_parameter_8cc.html b/_parameter_8cc.html index 58012eb7729..5a634641003 100644 --- a/_parameter_8cc.html +++ b/_parameter_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Parameter.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_parameter_8cc_source.html b/_parameter_8cc_source.html index b9e570e036c..e92ceda6e86 100644 --- a/_parameter_8cc_source.html +++ b/_parameter_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Parameter.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -126,7 +123,7 @@
18 
20 
-
21 void swap(Parameter& first, Parameter& second) {
+
21 void swap(Parameter& first, Parameter& second) {
22  using std::swap;
23  swap(first.name_, second.name_);
24  swap(first.val_, second.val_);
@@ -178,7 +175,7 @@
70  return out;
71 }
72 
-
73 std::ostream& operator<< (std::ostream &out, Parameter &val) {
+
73 std::ostream& operator<< (std::ostream &out, Parameter &val) {
74  std::string grps = "";
75  unsigned i = 0;
76  unsigned n = val.groups().size();
@@ -199,25 +196,25 @@
91  return out;
92 }
93 }
-
- + + +
double err_u() const
Definition: Parameter.h:34
bool frozen() const
Definition: Parameter.h:51
-
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
+ +
std::set< std::string > & groups()
Definition: Parameter.h:54
double err_d() const
Definition: Parameter.h:37
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Parameter.cc:62
friend void swap(Parameter &first, Parameter &second)
Definition: Parameter.cc:21
-
void swap(Parameter &first, Parameter &second)
Definition: Parameter.cc:21
- +
std::string const & name() const
Definition: Parameter.h:21
double val() const
Definition: Parameter.h:31
Parameter & operator=(Parameter other)
Definition: Parameter.cc:57
Definition: Algorithm.h:10
- -
std::set< std::string > & groups()
Definition: Parameter.h:54
-
std::string const & name() const
Definition: Parameter.h:21
-
double err_u() const
Definition: Parameter.h:34
-
void swap(CombineHarvester &first, CombineHarvester &second)
+
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
+
void swap(Parameter &first, Parameter &second)
Definition: Parameter.cc:21
+
void swap(CombineHarvester &first, CombineHarvester &second)
+ + diff --git a/_parameter_8h.html b/_parameter_8h.html index 37da622221c..3f5a28be9ab 100644 --- a/_parameter_8h.html +++ b/_parameter_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Parameter.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_parameter_8h_source.html b/_parameter_8h_source.html index c2c8c63cd22..0603cfd4261 100644 --- a/_parameter_8h_source.html +++ b/_parameter_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Parameter.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -179,34 +176,34 @@
71 }
72 
73 #endif
-
- + + +
void set_frozen(bool const &frozen)
Definition: Parameter.h:50
+
double err_u() const
Definition: Parameter.h:34
bool frozen() const
Definition: Parameter.h:51
+ +
std::set< std::string > & groups()
Definition: Parameter.h:54
+
void set_err_u(double const &err_u)
Definition: Parameter.h:33
+
void set_err_d(double const &err_d)
Definition: Parameter.h:36
double err_d() const
Definition: Parameter.h:37
+
friend std::ostream & operator<<(std::ostream &out, Parameter &val)
Definition: Parameter.cc:73
+
void set_name(std::string const &name)
Definition: Parameter.h:20
+
std::vector< RooRealVar * > & vars()
Definition: Parameter.h:53
static std::ostream & PrintHeader(std::ostream &out)
Definition: Parameter.cc:62
+
void set_range(double const &range_d, double const &range_u)
Definition: Parameter.h:45
+
void set_range_u(double const &range_u)
Definition: Parameter.h:39
+
void set_val(double const &val)
Definition: Parameter.h:23
friend void swap(Parameter &first, Parameter &second)
Definition: Parameter.cc:21
-
void set_name(std::string const &name)
Definition: Parameter.h:20
+
std::string const & name() const
Definition: Parameter.h:21
+
void set_range_d(double const &range_d)
Definition: Parameter.h:42
+
double range_d() const
Definition: Parameter.h:43
double range_u() const
Definition: Parameter.h:40
-
friend std::ostream & operator<<(std::ostream &out, Parameter &val)
Definition: Parameter.cc:73
-
std::vector< RooRealVar * > & vars()
Definition: Parameter.h:53
- -
void set_val(double const &val)
Definition: Parameter.h:23
double val() const
Definition: Parameter.h:31
-
void set_range_d(double const &range_d)
Definition: Parameter.h:42
- -
void set_frozen(bool const &frozen)
Definition: Parameter.h:50
Parameter & operator=(Parameter other)
Definition: Parameter.cc:57
-
double range_d() const
Definition: Parameter.h:43
Definition: Algorithm.h:10
- -
void set_range_u(double const &range_u)
Definition: Parameter.h:39
-
void set_err_d(double const &err_d)
Definition: Parameter.h:36
-
void set_range(double const &range_d, double const &range_u)
Definition: Parameter.h:45
-
std::set< std::string > & groups()
Definition: Parameter.h:54
-
std::string const & name() const
Definition: Parameter.h:21
-
double err_u() const
Definition: Parameter.h:34
-
void set_err_u(double const &err_u)
Definition: Parameter.h:33
+ + diff --git a/_parse_combine_workspace_8cc.html b/_parse_combine_workspace_8cc.html index 13a04684972..273ef03a5c6 100644 --- a/_parse_combine_workspace_8cc.html +++ b/_parse_combine_workspace_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/ParseCombineWorkspace.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_parse_combine_workspace_8cc_source.html b/_parse_combine_workspace_8cc_source.html index 29b18b0b1f7..7db81f157fb 100644 --- a/_parse_combine_workspace_8cc_source.html +++ b/_parse_combine_workspace_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/ParseCombineWorkspace.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -124,7 +121,7 @@
16 void ParseCombineWorkspacePy(CombineHarvester& cb, RooWorkspace const& ws,
17  std::string const& modelcfg,
18  std::string const& data, bool verbose) {
-
19  ParseCombineWorkspace(cb, const_cast<RooWorkspace&>(ws), modelcfg, data, verbose);
+
19  ParseCombineWorkspace(cb, const_cast<RooWorkspace&>(ws), modelcfg, data, verbose);
20 }
21 
22 void ParseCombineWorkspace(CombineHarvester& cb, RooWorkspace& ws,
@@ -133,12 +130,12 @@
25  bool v = verbose;
26 
27  RooStats::ModelConfig* cfg =
-
28  dynamic_cast<RooStats::ModelConfig*>(ws.genobj(modelcfg_name.c_str()));
+
28  dynamic_cast<RooStats::ModelConfig*>(ws.genobj(modelcfg_name.c_str()));
29  if (!cfg) {
30  throw std::runtime_error(
31  FNERROR("Could not get ModelConfig from workspace"));
32  }
-
33  RooSimultaneous* pdf = dynamic_cast<RooSimultaneous*>(cfg->GetPdf());
+
33  RooSimultaneous* pdf = dynamic_cast<RooSimultaneous*>(cfg->GetPdf());
34  if (!pdf) {
35  throw std::runtime_error(FNERROR("PDF is not a RooSimultaneous"));
36  }
@@ -157,7 +154,7 @@
49  // Hard-coded the category as "CMS_channel". Could deduce instead...
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));
+
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";
55 
@@ -172,8 +169,8 @@
64  std::unique_ptr<RooArgSet> pdf_obs(ipdf->getObservables(data->get()));
65  idat = idat->reduce(*pdf_obs);
66  ws.import(*idat);
-
67  RooAddPdf *ipdf_add = dynamic_cast<RooAddPdf*>(ipdf);
-
68  RooRealSumPdf *ipdf_sum = dynamic_cast<RooRealSumPdf*>(ipdf);
+
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;
71  if (ipdf_add) {
@@ -192,7 +189,7 @@
84  throw std::runtime_error(FNERROR("This RooRealSumPdf is not extended!"));
85  }
86  if (pdfs->getSize() == 1) {
-
87  CMSHistErrorPropagator *err = dynamic_cast<CMSHistErrorPropagator*>(pdfs->at(0));
+
87  CMSHistErrorPropagator *err = dynamic_cast<CMSHistErrorPropagator*>(pdfs->at(0));
88  if (err) {
89  coeffs = &(err->coefList());
90  pdfs = new RooArgList(err->wrapperList());
@@ -201,8 +198,8 @@
93  }
94  }
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));
+
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";
100  ch::Process proc;
@@ -234,48 +231,48 @@
126 }
127 
128 RooAbsReal* FindAddPdf(RooAbsReal* input) {
-
129  RooAddPdf *as_add = dynamic_cast<RooAddPdf*>(input);
-
130  RooRealSumPdf *as_sum = dynamic_cast<RooRealSumPdf*>(input);
+
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);
+
133  RooProdPdf *as_prod = dynamic_cast<RooProdPdf*>(input);
134  if (as_prod) {
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)));
+
137  RooAbsReal* try_add = FindAddPdf(dynamic_cast<RooAbsReal*>(comps.at(i)));
138  if (try_add) return try_add;
139  }
140  }
141  return nullptr;
142 }
143 }
-
- -
void ExtractData(std::string const &ws_name, std::string const &rule)
-
RooAbsReal * FindAddPdf(RooAbsReal *input)
-
void ParseCombineWorkspacePy(CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
-
void AddWorkspace(RooWorkspace const &ws, bool can_rename=false)
+ +
#define FNLOGC(x, y)
Definition: Logging.h:14
+
#define FNERROR(x)
Definition: Logging.h:9
+ + +
void AddWorkspace(RooWorkspace const &ws, bool can_rename=false)
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > bin_set()
+
void InsertProcess(ch::Process const &proc)
+
void ExtractData(std::string const &ws_name, std::string const &rule)
+
void InsertObservation(ch::Observation const &obs)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
virtual void set_process(std::string const &process)
Definition: Object.h:19
+
virtual std::string const & process() const
Definition: Object.h:20
virtual void set_bin(std::string const &bin)
Definition: Object.h:16
-
void ParseCombineWorkspace(CombineHarvester &cb, RooWorkspace &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
virtual std::string const & bin() const
Definition: Object.h:17
-
void InsertProcess(ch::Process const &proc)
-
#define FNERROR(x)
Definition: Logging.h:9
void set_signal(bool const &signal)
Definition: Object.h:22
-
void InsertObservation(ch::Observation const &obs)
+
void set_rate(double const &rate)
Definition: Process.h:24
-
#define FNLOGC(x, y)
Definition: Logging.h:14
-
std::set< std::string > bin_set()
Definition: Algorithm.h:10
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
- -
virtual std::string const & process() const
Definition: Object.h:20
- - - -
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
RooAbsReal * FindAddPdf(RooAbsReal *input)
+
void ParseCombineWorkspace(CombineHarvester &cb, RooWorkspace &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)
+ + diff --git a/_parse_combine_workspace_8h.html b/_parse_combine_workspace_8h.html index 5046a7267c8..c958c4f45d8 100644 --- a/_parse_combine_workspace_8h.html +++ b/_parse_combine_workspace_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/ParseCombineWorkspace.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_parse_combine_workspace_8h_source.html b/_parse_combine_workspace_8h_source.html index 5ce62e54dee..ee81053f3a3 100644 --- a/_parse_combine_workspace_8h_source.html +++ b/_parse_combine_workspace_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/ParseCombineWorkspace.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -127,13 +124,13 @@
19 RooAbsReal* FindAddPdf(RooAbsReal* input);
20 }
21 #endif
-
- + +
Definition: Algorithm.h:10
RooAbsReal * FindAddPdf(RooAbsReal *input)
-
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)
-
Definition: Algorithm.h:10
- +
void ParseCombineWorkspacePy(CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
+ + diff --git a/_plotting_8h.html b/_plotting_8h.html index 37f6eaa777c..f5d44c1c4d6 100644 --- a/_plotting_8h.html +++ b/_plotting_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Plotting.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@ - + @@ -83,7 +80,7 @@
@@ -225,7 +222,7 @@
483 }
484 
485 TH1* CreateAxisHist(TH1* src, double xmin, double xmax) {
-
486  TH1 *res = reinterpret_cast<TH1F*>(src->Clone());
+
486  TH1 *res = reinterpret_cast<TH1F*>(src->Clone());
487  res->Reset();
488  if (xmax > xmin) {
489  res->SetAxisRange(xmin, xmax);
@@ -283,19 +280,19 @@
541  TH1 *hobj = 0;
542  while ((obj = next())) {
543  if (obj->InheritsFrom(TH1::Class())) {
-
544  hobj = reinterpret_cast<TH1*>(obj);
+
544  hobj = reinterpret_cast<TH1*>(obj);
545  break;
546  }
547  if (obj->InheritsFrom(TMultiGraph::Class())) {
-
548  TMultiGraph *mg = reinterpret_cast<TMultiGraph*>(obj);
+
548  TMultiGraph *mg = reinterpret_cast<TMultiGraph*>(obj);
549  if (mg) return mg->GetHistogram();
550  }
551  if (obj->InheritsFrom(TGraph::Class())) {
-
552  TGraph *g = reinterpret_cast<TGraph*>(obj);
+
552  TGraph *g = reinterpret_cast<TGraph*>(obj);
553  if (g) return g->GetHistogram();
554  }
555  if (obj->InheritsFrom(THStack::Class())) {
-
556  THStack *hs = reinterpret_cast<THStack*>(obj);
+
556  THStack *hs = reinterpret_cast<THStack*>(obj);
557  if (hs) return hs->GetHistogram();
558  }
559  }
@@ -307,11 +304,11 @@
565 // Object extraction and manipulation
566 //----------------------------------------------------------------------------
567 TH1* MakeRatioHist(TH1* num, TH1* den, bool num_err, bool den_err) {
-
568  TH1* result = reinterpret_cast<TH1*>(num->Clone());
+
568  TH1* result = reinterpret_cast<TH1*>(num->Clone());
569  if (!num_err) {
570  for (int i = 1; i <= result->GetNbinsX(); ++i) result->SetBinError(i, 0.);
571  }
-
572  TH1* den_fix = reinterpret_cast<TH1*>(den->Clone());
+
572  TH1* den_fix = reinterpret_cast<TH1*>(den->Clone());
573  if (!den_err) {
574  for (int i = 1; i <= den_fix->GetNbinsX(); ++i) den_fix->SetBinError(i, 0.);
575  }
@@ -459,8 +456,8 @@
717  float l = pad->GetLeftMargin();
718  float r = pad->GetRightMargin();
719 
-
720  float pad_ratio = (static_cast<float>(pad->GetWh()) * pad->GetAbsHNDC()) /
-
721  (static_cast<float>(pad->GetWw()) * pad->GetAbsWNDC());
+
720  float pad_ratio = (static_cast<float>(pad->GetWh()) * pad->GetAbsHNDC()) /
+
721  (static_cast<float>(pad->GetWw()) * pad->GetAbsWNDC());
722  if (pad_ratio < 1.) pad_ratio = 1.;
723 
724  float textSize = 0.6;
@@ -531,8 +528,8 @@
789  latex.SetTextColor(kBlack);
790 
791  float extraTextSize = extraOverCmsTextSize * cmsTextSize;
-
792  float pad_ratio = (static_cast<float>(pad->GetWh()) * pad->GetAbsHNDC()) /
-
793  (static_cast<float>(pad->GetWw()) * pad->GetAbsWNDC());
+
792  float pad_ratio = (static_cast<float>(pad->GetWh()) * pad->GetAbsHNDC()) /
+
793  (static_cast<float>(pad->GetWw()) * pad->GetAbsWNDC());
794  if (pad_ratio < 1.) pad_ratio = 1.;
795 
796 
@@ -591,7 +588,7 @@
849  TObject *obj;
850  while ((obj = next())) {
851  if (obj->InheritsFrom(TH1::Class())) {
-
852  TH1 *hobj = reinterpret_cast<TH1*>(obj);
+
852  TH1 *hobj = reinterpret_cast<TH1*>(obj);
853  for (int j = 1; j < hobj->GetNbinsX(); ++j) {
854  if (hobj->GetBinLowEdge(j) + hobj->GetBinWidth(j) < x_min ||
855  hobj->GetBinLowEdge(j) > x_max)
@@ -602,7 +599,7 @@
860  }
861  }
862  if (obj->InheritsFrom(TGraph::Class())) {
-
863  TGraph *gobj = reinterpret_cast<TGraph*>(obj);
+
863  TGraph *gobj = reinterpret_cast<TGraph*>(obj);
864  unsigned n = gobj->GetN();
865  double x = 0;
866  double y = 0;
@@ -687,29 +684,29 @@
945 void FixOverlay() { gPad->GetFrame()->Draw(); gPad->RedrawAxis(); }
946 
947 #endif
-
- -
TH1 * CreateAxisHist(TH1 *src, double xmin=0, double xmax=-1)
Create an empty TH1 from another TH1 for drawing the axes.
Definition: Plotting.h:485
-
TLegend * PositionedLegend(double width, double height, int pos, double offset)
Create a legend with fixed height, width and positioning.
Definition: Plotting.h:669
+
void FixBoxPadding(TPad *pad, TBox *box, double frac)
Modify the pad y-axis range to ensure there is at least a given gap between a particular TBox and the...
Definition: Plotting.h:902
void DrawTitle(TPad *pad, TString text, int align)
Draw text in the top-margin region of a TPad.
Definition: Plotting.h:713
-
TLine * DrawHorizontalLine(TPad *pad, TLine *line, double yval)
Use an existing TLine to draw a new horizontal line across the current frame.
Definition: Plotting.h:705
+
void FixOverlay()
Just re-draws the axes on the current TPad.
Definition: Plotting.h:945
void UnitAxes(TAxis *xaxis, TAxis *yaxis, TString var, TString units)
Sets standard x- and y-axis titles when histograms are drawn divided by bin width.
Definition: Plotting.h:664
-
int CreateTransparentColor(int color, float alpha)
Create a transparent version of a colour.
Definition: Plotting.h:614
+
TH1 * MakeRatioHist(TH1 *num, TH1 *den, bool num_err, bool den_err)
Create a new histogram by dividing one by the other.
Definition: Plotting.h:567
+
void FixTopRange(TPad *pad, double fix_y, double fraction)
Adjusts the y-axis maximum on the pad such that the specified y-value is positioned a fixed fraction ...
Definition: Plotting.h:885
+
TLegend * PositionedLegend(double width, double height, int pos, double offset)
Create a legend with fixed height, width and positioning.
Definition: Plotting.h:669
TGraph TGraphFromTree(TTree *tree, TString const &xvar, TString const &yvar, TString const &selection="")
Create a TGraph from entries in a TTree.
Definition: Plotting.h:581
-
TH1 * GetAxisHist(TPad *pad)
Finds the TH1 used to draw the axes on a given TPad.
Definition: Plotting.h:536
double GetPadYMax(TPad *pad, double x_min, double x_max)
Find the maximum value of all drawn objects in a given x-axis range.
Definition: Plotting.h:844
-
void FixBoxPadding(TPad *pad, TBox *box, double frac)
Modify the pad y-axis range to ensure there is at least a given gap between a particular TBox and the...
Definition: Plotting.h:902
-
void DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX, float relPosX, float relPosY, float relExtraDY)
Draw the CMS logo and subtitle in the new style.
Definition: Plotting.h:744
+
void StandardAxes(TAxis *xaxis, TAxis *yaxis, TString var, TString units)
Sets standard x- and y-axis titles with given units.
Definition: Plotting.h:651
std::vector< TPad * > OnePad()
Just creates a single pad filling the entire canvas.
Definition: Plotting.h:459
-
void ReZeroTGraph(TGraph *gr)
Shift all the graph y-values upwards such that there are no negative values and the minimum point is ...
Definition: Plotting.h:595
-
std::vector< TPad * > TwoPadSplit(double split_point, double gap_low, double gap_high)
Create two pads, split horizontally, on the current canvas split.
Definition: Plotting.h:468
+
TLine * DrawHorizontalLine(TPad *pad, TLine *line, double yval)
Use an existing TLine to draw a new horizontal line across the current frame.
Definition: Plotting.h:705
+
std::vector< TH1 * > CreateAxisHists(unsigned n, TH1 *src, double xmin=0, double xmax=-1)
Create multiple axis TH1s from another TH1.
Definition: Plotting.h:494
+
TH1 * GetAxisHist(TPad *pad)
Finds the TH1 used to draw the axes on a given TPad.
Definition: Plotting.h:536
void SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TH1 *upper, TH1 *lower, TString y_title, bool y_centered, float y_min, float y_max)
Set a few style options for a two-pad setup used to show a data-MC comparison and ratio plot.
Definition: Plotting.h:632
-
void StandardAxes(TAxis *xaxis, TAxis *yaxis, TString var, TString units)
Sets standard x- and y-axis titles with given units.
Definition: Plotting.h:651
-
void FixOverlay()
Just re-draws the axes on the current TPad.
Definition: Plotting.h:945
+
void DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX, float relPosX, float relPosY, float relExtraDY)
Draw the CMS logo and subtitle in the new style.
Definition: Plotting.h:744
+
TH1 * CreateAxisHist(TH1 *src, double xmin=0, double xmax=-1)
Create an empty TH1 from another TH1 for drawing the axes.
Definition: Plotting.h:485
+
int CreateTransparentColor(int color, float alpha)
Create a transparent version of a colour.
Definition: Plotting.h:614
+
std::vector< TPad * > TwoPadSplit(double split_point, double gap_low, double gap_high)
Create two pads, split horizontally, on the current canvas split.
Definition: Plotting.h:468
+
void ReZeroTGraph(TGraph *gr)
Shift all the graph y-values upwards such that there are no negative values and the minimum point is ...
Definition: Plotting.h:595
TGraph2D TGraph2DFromTree(TTree *tree, TString const &xvar, TString const &yvar, TString const &zvar, TString const &selection="")
Create a TGraph2D from entries in a TTree.
Definition: Plotting.h:588
-
std::vector< TH1 * > CreateAxisHists(unsigned n, TH1 *src, double xmin=0, double xmax=-1)
Create multiple axis TH1s from another TH1.
Definition: Plotting.h:494
-
TH1 * MakeRatioHist(TH1 *num, TH1 *den, bool num_err, bool den_err)
Create a new histogram by dividing one by the other.
Definition: Plotting.h:567
-
void FixTopRange(TPad *pad, double fix_y, double fraction)
Adjusts the y-axis maximum on the pad such that the specified y-value is positioned a fixed fraction ...
Definition: Plotting.h:885
+ + diff --git a/_plotting___contours_8h.html b/_plotting___contours_8h.html index 9726ced2ca9..478d79e4a2e 100644 --- a/_plotting___contours_8h.html +++ b/_plotting___contours_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Plotting_Contours.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_plotting___contours_8h_source.html b/_plotting___contours_8h_source.html index 37ac4e94957..94d8970e6db 100644 --- a/_plotting___contours_8h_source.html +++ b/_plotting___contours_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Plotting_Contours.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -143,9 +140,9 @@
35 
36 TH2D *frameTH2D(TH2D *in, double threshold);
37 
-
38 void styleMultiGraph(TList *tmg, int lineColor, int lineWidth, int lineStyle);
+
38 void styleMultiGraph(TList *tmg, int lineColor, int lineWidth, int lineStyle);
39 
-
40 void styleMultiGraphMarker(TList *tmg, int markerColor, int markerSize,
+
40 void styleMultiGraphMarker(TList *tmg, int markerColor, int markerSize,
41  int markerStyle);
42 
43 void drawContours(TPad *pad, TString file, TString x_title, TString y_title,
@@ -420,17 +417,17 @@
333 }
334 
335 #endif
-
- -
TGraph * bestFit(TTree *t, TString x, TString y, TCut cut)
-
TList * contourFromTH2(TH2 *h2in, double threshold, int minPoints=20)
-
void contour2D(TString filein, TString fileout, TString xvar, int xbins, float xmin, float xmax, TString yvar, int ybins, float ymin, float ymax, TString name="contour2D")
Make a 2D contour plot from the output of MultiDimFit.
void styleMultiGraphMarker(TList *tmg, int markerColor, int markerSize, int markerStyle)
TH2D * frameTH2D(TH2D *in, double threshold)
-
TH2 * treeToHist2D(TTree *t, TString x, TString y, TString name, TCut cut, double xmin, double xmax, double ymin, double ymax, int xbins, int ybins)
+
TGraph * bestFit(TTree *t, TString x, TString y, TCut cut)
+
void contour2D(TString filein, TString fileout, TString xvar, int xbins, float xmin, float xmax, TString yvar, int ybins, float ymin, float ymax, TString name="contour2D")
Make a 2D contour plot from the output of MultiDimFit.
void styleMultiGraph(TList *tmg, int lineColor, int lineWidth, int lineStyle)
+
TList * contourFromTH2(TH2 *h2in, double threshold, int minPoints=20)
+
TH2 * treeToHist2D(TTree *t, TString x, TString y, TString name, TCut cut, double xmin, double xmax, double ymin, double ymax, int xbins, int ybins)
void drawContours(TPad *pad, TString file, TString x_title, TString y_title, TLegend *leg)
+ + diff --git a/_plotting___style_8h.html b/_plotting___style_8h.html index 0c01fc0259c..2aa600f6d24 100644 --- a/_plotting___style_8h.html +++ b/_plotting___style_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Plotting_Style.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_plotting___style_8h_source.html b/_plotting___style_8h_source.html index 8c881e155d0..3a9c8e6473a 100644 --- a/_plotting___style_8h_source.html +++ b/_plotting___style_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Plotting_Style.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -275,8 +272,8 @@
191  // These are given as fractions of the pad height for `Top` and `Bottom` and
192  // the pad width for `Left` and `Right`. But we want to specify all of these
193  // as fractions of the shortest length.
-
194  double def_w = static_cast<double>(gStyle->GetCanvasDefW());
-
195  double def_h = static_cast<double>(gStyle->GetCanvasDefH());
+
194  double def_w = static_cast<double>(gStyle->GetCanvasDefW());
+
195  double def_h = static_cast<double>(gStyle->GetCanvasDefH());
196 
197  double scale_h = (def_h > def_w) ? def_w / def_h : 1.;
198  double scale_w = (def_w > def_h) ? def_h / def_w : 1.;
@@ -343,11 +340,11 @@
259 }
260 
261 #endif
-
- +
void TdrGrid(bool grid_on)
Modify the global style to enable/disable the drawing of axis gridlines.
void SetTDRStyle()
Sets the semi-official CMS plotting global style.
void ModTDRStyle(int width, int height, double t, double b, double l, double r)
Sets an improved plotting style, using the CMS default as a base.
-
void TdrGrid(bool grid_on)
Modify the global style to enable/disable the drawing of axis gridlines.
+ + diff --git a/_post_fit_shapes_from_workspace_8cpp.html b/_post_fit_shapes_from_workspace_8cpp.html index 8ffdabc0f9a..f8e0bb78caa 100644 --- a/_post_fit_shapes_from_workspace_8cpp.html +++ b/_post_fit_shapes_from_workspace_8cpp.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/bin/PostFitShapesFromWorkspace.cpp File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_post_fit_shapes_from_workspace_8cpp_source.html b/_post_fit_shapes_from_workspace_8cpp_source.html index 2eb6310d55d..b9e112f2199 100644 --- a/_post_fit_shapes_from_workspace_8cpp_source.html +++ b/_post_fit_shapes_from_workspace_8cpp_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/bin/PostFitShapesFromWorkspace.cpp Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -238,7 +235,7 @@
130 
131  TFile infile(workspace.c_str());
132 
-
133  RooWorkspace *ws = dynamic_cast<RooWorkspace*>(gDirectory->Get("w"));
+
133  RooWorkspace *ws = dynamic_cast<RooWorkspace*>(gDirectory->Get("w"));
134 
135  if (!ws) {
136  throw std::runtime_error(
@@ -287,7 +284,7 @@
179  // Drop any process that has no hist/data/pdf
180  cmb.FilterProcs([&](ch::Process * proc) {
181  bool no_shape = !proc->shape() && !proc->data() && !proc->pdf();
-
182  if (no_shape) {
+
182  if (no_shape) {
183  cout << "Filtering process with no shape:\n";
184  cout << ch::Process::PrintHeader << *proc << "\n";
185  }
@@ -563,45 +560,45 @@
455  return 0;
456 }
457 
-
- -
TH2F GetRateCovariance(RooFitResult const &fit, unsigned n_samples)
-
void ParseCombineWorkspace(CombineHarvester &cb, RooWorkspace &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
-
std::set< std::string > process_set()
- + +
#define FNERROR(x)
Definition: Logging.h:9
-
void WriteToTFile(T *ptr, TFile *file, std::string const &path)
Definition: TFileIO.h:31
+ +
int main(int argc, char *argv[])
void ReverseBins(TH1F &h)
-
CombineHarvester & FilterProcs(Function func)
- -
TH1 const * shape() const
Definition: Process.h:52
-
void UpdateParameters(std::vector< ch::Parameter > const &params)
- - -
void set_val(double const &val)
Definition: Parameter.h:23
-
ch::Parameter const * GetParameter(std::string const &name) const
+ + +
TH2F GetRateCovariance(RooFitResult const &fit, unsigned n_samples)
+
CombineHarvester & backgrounds()
-
std::set< std::string > bin_set()
-
void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
-
TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
Definition: Utilities.cc:181
-
RooAbsData const * data() const
Definition: Process.h:63
-
void set_frozen(bool const &frozen)
Definition: Parameter.h:50
CombineHarvester & signals()
-
int main(int argc, char *argv[])
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
TH2F GetRateCorrelation(RooFitResult const &fit, unsigned n_samples)
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
+
std::set< std::string > process_set()
- - -
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)
-
TH2F GetRateCorrelation(RooFitResult const &fit, unsigned n_samples)
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
- +
void UpdateParameters(std::vector< ch::Parameter > const &params)
+
std::set< std::string > bin_set()
+ +
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 & FilterProcs(Function func)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
ch::Parameter const * GetParameter(std::string const &name) const
+ + +
void set_frozen(bool const &frozen)
Definition: Parameter.h:50
+
void set_val(double const &val)
Definition: Parameter.h:23
+
RooAbsReal const * pdf() const
Definition: Process.h:60
- +
RooAbsData const * data() const
Definition: Process.h:63
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
- - -
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+
TH1 const * shape() const
Definition: Process.h:52
+
void WriteToTFile(T *ptr, TFile *file, std::string const &path)
Definition: TFileIO.h:31
+
TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
Definition: Utilities.cc:181
+
void ParseCombineWorkspace(CombineHarvester &cb, RooWorkspace &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
+ + diff --git a/_post_fit_shapes_from_workspace_8md.html b/_post_fit_shapes_from_workspace_8md.html index 0508a2cb6c3..c9fddae604b 100644 --- a/_post_fit_shapes_from_workspace_8md.html +++ b/_post_fit_shapes_from_workspace_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/PostFitShapesFromWorkspace.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_process_8cc.html b/_process_8cc.html index cf8d1dca07d..b4ed47d2fce 100644 --- a/_process_8cc.html +++ b/_process_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Process.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_process_8cc_source.html b/_process_8cc_source.html index d7bb3d3ba4e..242f8180559 100644 --- a/_process_8cc_source.html +++ b/_process_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Process.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -119,7 +116,7 @@
11  val.mass() % val.analysis() % val.era() % val.channel() %
12  val.bin() % val.bin_id() % val.process() % val.signal() %
13  val.rate() %
-
14  (bool(val.shape()) || bool(val.pdf()) || bool(val.data()));
+
14  (bool(val.shape()) || bool(val.pdf()) || bool(val.data()));
15 }
16 }
17 
@@ -141,9 +138,9 @@
33  if (cached_int_) delete cached_int_;
34 }
35 
-
36 void swap(Process& first, Process& second) {
+
36 void swap(Process& first, Process& second) {
37  using std::swap;
-
38  swap(static_cast<Object&>(first), static_cast<Object&>(second));
+
38  swap(static_cast<Object&>(first), static_cast<Object&>(second));
39  swap(first.rate_, second.rate_);
40  swap(first.shape_, second.shape_);
41  swap(first.pdf_, second.pdf_);
@@ -163,7 +160,7 @@
55  cached_int_(nullptr) {
56  TH1 *h = nullptr;
57  if (other.shape_) {
-
58  h = static_cast<TH1*>(other.shape_->Clone());
+
58  h = static_cast<TH1*>(other.shape_->Clone());
59  h->SetDirectory(0);
60  }
61  shape_ = std::unique_ptr<TH1>(h);
@@ -211,13 +208,13 @@
103 }
104 
105 void Process::set_shape(TH1 const& shape, bool set_rate) {
-
106  set_shape(std::unique_ptr<TH1>(static_cast<TH1*>(shape.Clone())), set_rate);
+
106  set_shape(std::unique_ptr<TH1>(static_cast<TH1*>(shape.Clone())), set_rate);
107 }
108 
109 
110 std::unique_ptr<TH1> Process::ClonedShape() const {
111  if (!shape_) return std::unique_ptr<TH1>();
-
112  std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_->Clone()));
+
112  std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_->Clone()));
113  res->SetDirectory(0);
114  return res;
115 }
@@ -238,8 +235,8 @@
130  if (this->shape()) {
131  // Need to get the shape as a concrete type (TH1F or TH1D)
132  // A nice way to do this is just to use TH1D::Copy into a fresh TH1F
-
133  TH1F const* test_f = dynamic_cast<TH1F const*>(this->shape());
-
134  TH1D const* test_d = dynamic_cast<TH1D const*>(this->shape());
+
133  TH1F const* test_f = dynamic_cast<TH1F const*>(this->shape());
+
134  TH1D const* test_d = dynamic_cast<TH1D const*>(this->shape());
135  if (test_f) {
136  test_f->Copy(res);
137  } else if (test_d) {
@@ -249,7 +246,7 @@
141  }
142  } else if (this->data()) {
143  std::string var_name = this->data()->get()->first()->GetName();
-
144  TH1F *tmp = dynamic_cast<TH1F*>(this->data()->createHistogram(
+
144  TH1F *tmp = dynamic_cast<TH1F*>(this->data()->createHistogram(
145  var_name.c_str()));
146  res = *tmp;
147  delete tmp;
@@ -275,46 +272,46 @@
167  return ::format_proc(*this).str();
168 }
169 
-
170 std::ostream& operator<< (std::ostream &out, Process const& val) {
+
170 std::ostream& operator<< (std::ostream &out, Process const& val) {
171  out << ::format_proc(val);
172  return out;
173 }
174 }
-
- -
double rate() const
Definition: Process.h:25
-
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
-
virtual std::string const & era() const
Definition: Object.h:29
-
friend void swap(Process &first, Process &second)
Definition: Process.cc:36
+ +
#define FNERROR(x)
Definition: Logging.h:9
+ +
virtual std::string const & process() const
Definition: Object.h:20
virtual std::string const & bin() const
Definition: Object.h:17
-
#define FNERROR(x)
Definition: Logging.h:9
+
virtual int bin_id() const
Definition: Object.h:35
+
virtual std::string const & analysis() const
Definition: Object.h:26
+
virtual std::string const & era() const
Definition: Object.h:29
+
virtual std::string const & mass() const
Definition: Object.h:38
+
bool signal() const
Definition: Object.h:23
virtual std::string const & channel() const
Definition: Object.h:32
-
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Process.cc:81
-
TH1 const * shape() const
Definition: Process.h:52
+
double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
Definition: Process.h:46
+
TH1F ShapeAsTH1F() const
Definition: Process.cc:124
+
RooAbsReal const * pdf() const
Definition: Process.h:60
void set_rate(double const &rate)
Definition: Process.h:24
-
virtual std::string const & analysis() const
Definition: Object.h:26
+ +
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Process.cc:117
+
double rate() const
Definition: Process.h:25
+
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Process.cc:81
std::string to_string() const
Definition: Process.cc:166
-
void swap(Process &first, Process &second)
Definition: Process.cc:36
RooAbsData const * data() const
Definition: Process.h:63
-
virtual std::string const & mass() const
Definition: Object.h:38
- -
double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
Definition: Process.h:46
-
Definition: Algorithm.h:10
-
bool signal() const
Definition: Object.h:23
-
virtual int bin_id() const
Definition: Object.h:35
+
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
+
friend void swap(Process &first, Process &second)
Definition: Process.cc:36
+
TH1 const * shape() const
Definition: Process.h:52
Process & operator=(Process other)
Definition: Process.cc:76
-
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Process.cc:117
-
TH1F ShapeAsTH1F() const
Definition: Process.cc:124
- -
RooAbsReal const * pdf() const
Definition: Process.h:60
std::unique_ptr< TH1 > ClonedShape() const
Definition: Process.cc:110
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
-
void swap(CombineHarvester &first, CombineHarvester &second)
-
virtual std::string const & process() const
Definition: Object.h:20
- +
Definition: Algorithm.h:10
+
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
+
void swap(Process &first, Process &second)
Definition: Process.cc:36
+
void swap(CombineHarvester &first, CombineHarvester &second)
+ + diff --git a/_process_8h.html b/_process_8h.html index bff0704c769..ed239b03ddd 100644 --- a/_process_8h.html +++ b/_process_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Process.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_process_8h_source.html b/_process_8h_source.html index dd6b3719392..766eb2f5616 100644 --- a/_process_8h_source.html +++ b/_process_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Process.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -132,7 +129,7 @@
24  void set_rate(double const& rate) { rate_ = rate; }
25  double rate() const {
26  double base = 1.;
-
27  if (pdf_ && !dynamic_cast<RooAbsPdf*>(pdf_) && cached_obs_) {
+
27  if (pdf_ && !dynamic_cast<RooAbsPdf*>(pdf_) && cached_obs_) {
28  if (!cached_int_) {
29  cached_int_ = pdf_->createIntegral(RooArgSet(*cached_obs_));
30  }
@@ -184,36 +181,36 @@
86 }
87 
88 #endif
-
- -
double rate() const
Definition: Process.h:25
-
friend std::ostream & operator<<(std::ostream &out, Process const &val)
Definition: Process.cc:170
-
friend void swap(Process &first, Process &second)
Definition: Process.cc:36
-
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Process.cc:81
+ + + -
TH1 const * shape() const
Definition: Process.h:52
+
double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
Definition: Process.h:46
+
TH1F ShapeAsTH1F() const
Definition: Process.cc:124
+
void set_norm(RooAbsReal *norm)
Definition: Process.h:65
+
RooAbsReal const * pdf() const
Definition: Process.h:60
void set_rate(double const &rate)
Definition: Process.h:24
+ +
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Process.cc:117
+
double rate() const
Definition: Process.h:25
+
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
Definition: Process.cc:81
+
RooAbsReal const * norm() const
Definition: Process.h:66
std::string to_string() const
Definition: Process.cc:166
-
RooAbsData const * data() const
Definition: Process.h:63
-
RooRealVar * observable() const
Definition: Process.h:69
- -
double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
Definition: Process.h:46
+
void set_data(RooAbsData *data)
Definition: Process.h:62
-
Definition: Algorithm.h:10
-
void set_observable(RooRealVar *obs)
Definition: Process.h:68
-
Process & operator=(Process other)
Definition: Process.cc:76
-
std::unique_ptr< TH1 > ClonedScaledShape() const
Definition: Process.cc:117
-
TH1F ShapeAsTH1F() const
Definition: Process.cc:124
- -
RooAbsReal const * pdf() const
Definition: Process.h:60
-
std::unique_ptr< TH1 > ClonedShape() const
Definition: Process.cc:110
+
RooRealVar * observable() const
Definition: Process.h:69
static std::ostream & PrintHeader(std::ostream &out)
Definition: Process.cc:153
-
void set_norm(RooAbsReal *norm)
Definition: Process.h:65
+
friend void swap(Process &first, Process &second)
Definition: Process.cc:36
+
friend std::ostream & operator<<(std::ostream &out, Process const &val)
Definition: Process.cc:170
+
TH1 const * shape() const
Definition: Process.h:52
void set_pdf(RooAbsReal *pdf)
Definition: Process.h:59
-
RooAbsReal const * norm() const
Definition: Process.h:66
- -
void set_data(RooAbsData *data)
Definition: Process.h:62
+
Process & operator=(Process other)
Definition: Process.cc:76
+
void set_observable(RooRealVar *obs)
Definition: Process.h:68
+
std::unique_ptr< TH1 > ClonedShape() const
Definition: Process.cc:110
+
Definition: Algorithm.h:10
+ + diff --git a/_python_interface_8md.html b/_python_interface_8md.html index 5e4f9d740c5..24ea642400a 100644 --- a/_python_interface_8md.html +++ b/_python_interface_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/PythonInterface.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_reproduce_run1_h_t_t_datacards_8md.html b/_reproduce_run1_h_t_t_datacards_8md.html index 26cb654eaff..b0bf4c9e2e8 100644 --- a/_reproduce_run1_h_t_t_datacards_8md.html +++ b/_reproduce_run1_h_t_t_datacards_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/ReproduceRun1HTTDatacards.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_roo_morphing_pdf_8md.html b/_roo_morphing_pdf_8md.html index 1b137647012..1e9459872da 100644 --- a/_roo_morphing_pdf_8md.html +++ b/_roo_morphing_pdf_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/RooMorphingPdf.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_s_m_legacy_example_8cpp.html b/_s_m_legacy_example_8cpp.html index 2c8148f4ab0..430d8cc387d 100644 --- a/_s_m_legacy_example_8cpp.html +++ b/_s_m_legacy_example_8cpp.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/bin/SMLegacyExample.cpp File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/_s_m_legacy_example_8cpp_source.html b/_s_m_legacy_example_8cpp_source.html index 633f2cc0bdd..63048a7ba06 100644 --- a/_s_m_legacy_example_8cpp_source.html +++ b/_s_m_legacy_example_8cpp_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/bin/SMLegacyExample.cpp Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -276,36 +273,36 @@
171  .SetFixNorm(true);
173 
174  ch::CombineHarvester cb_et = cb.cp().channel({"et"});
-
175  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({1, 2}).process({"ZL", "ZJ", "QCD", "W"}), cb);
-
176  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({3, 5}).process({"W"}), cb);
-
177  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({1, 2}).process({"ZL", "ZJ", "QCD", "W"}), cb);
-
178  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({3, 5}).process({"W"}), cb);
-
179  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({6}).process({"ZL", "ZJ", "W", "ZTT"}), cb);
-
181  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({6}).process({"ZL", "ZJ", "W"}), cb);
-
183  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({7}).process({"ZL", "ZJ", "W", "ZTT"}), cb);
+
175  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({1, 2}).process({"ZL", "ZJ", "QCD", "W"}), cb);
+
176  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({3, 5}).process({"W"}), cb);
+
177  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({1, 2}).process({"ZL", "ZJ", "QCD", "W"}), cb);
+
178  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({3, 5}).process({"W"}), cb);
+
179  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({6}).process({"ZL", "ZJ", "W", "ZTT"}), cb);
+
181  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({6}).process({"ZL", "ZJ", "W"}), cb);
+
183  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({7}).process({"ZL", "ZJ", "W", "ZTT"}), cb);
184 
185  ch::CombineHarvester cb_mt = cb.cp().channel({"mt"});
-
186  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({1, 2, 3, 4}).process({"W", "QCD"}), cb);
-
187  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({1, 2, 3, 4}).process({"W", "QCD"}), cb);
-
188  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({5}).process({"W"}), cb);
-
189  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({6}).process({"W", "ZTT"}), cb);
-
190  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({5, 6}).process({"W"}), cb);
-
191  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({7}).process({"W", "ZTT"}), cb);
+
186  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({1, 2, 3, 4}).process({"W", "QCD"}), cb);
+
187  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({1, 2, 3, 4}).process({"W", "QCD"}), cb);
+
188  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({5}).process({"W"}), cb);
+
189  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({6}).process({"W", "ZTT"}), cb);
+
190  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({5, 6}).process({"W"}), cb);
+
191  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({7}).process({"W", "ZTT"}), cb);
192 
193  ch::CombineHarvester cb_em = cb.cp().channel({"em"});
-
194  bbb.MergeAndAdd(cb_em.cp().era({"7TeV"}).bin_id({1, 3}).process({"Fakes"}), cb);
-
195  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({1, 3}).process({"Fakes"}), cb);
-
196  bbb.MergeAndAdd(cb_em.cp().era({"7TeV"}).bin_id({4}).process({"Fakes", "EWK", "Ztt"}), cb);
-
197  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({5}).process({"Fakes", "EWK", "Ztt"}), cb);
-
198  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({4}).process({"Fakes", "EWK"}), cb);
+
194  bbb.MergeAndAdd(cb_em.cp().era({"7TeV"}).bin_id({1, 3}).process({"Fakes"}), cb);
+
195  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({1, 3}).process({"Fakes"}), cb);
+
196  bbb.MergeAndAdd(cb_em.cp().era({"7TeV"}).bin_id({4}).process({"Fakes", "EWK", "Ztt"}), cb);
+
197  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({5}).process({"Fakes", "EWK", "Ztt"}), cb);
+
198  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({4}).process({"Fakes", "EWK"}), cb);
199 
200  ch::CombineHarvester cb_tt = cb.cp().channel({"tt"});
-
201  bbb.MergeAndAdd(cb_tt.cp().era({"8TeV"}).bin_id({0, 1, 2}).process({"ZTT", "QCD"}), cb);
+
201  bbb.MergeAndAdd(cb_tt.cp().era({"8TeV"}).bin_id({0, 1, 2}).process({"ZTT", "QCD"}), cb);
202 
203  bbb.SetAddThreshold(0.); // ee and mm use a different threshold
204  ch::CombineHarvester cb_ll = cb.cp().channel({"ee", "mm"});
-
205  bbb.MergeAndAdd(cb_ll.cp().era({"7TeV"}).bin_id({1, 3, 4}).process({"ZTT", "ZEE", "ZMM", "TTJ"}), cb);
-
206  bbb.MergeAndAdd(cb_ll.cp().era({"8TeV"}).bin_id({1, 3, 4}).process({"ZTT", "ZEE", "ZMM", "TTJ"}), cb);
+
205  bbb.MergeAndAdd(cb_ll.cp().era({"7TeV"}).bin_id({1, 3, 4}).process({"ZTT", "ZEE", "ZMM", "TTJ"}), cb);
+
206  bbb.MergeAndAdd(cb_ll.cp().era({"8TeV"}).bin_id({1, 3, 4}).process({"ZTT", "ZEE", "ZMM", "TTJ"}), cb);
207 
208  cout << ">> Setting standardised bin names...\n";
@@ -373,48 +370,49 @@
273 
274  cout << "\n>> Done!\n";
275 }
-
- -
std::set< std::string > channel_set()
-
double rate() const
Definition: Process.h:25
-
BinByBinFactory & SetMergeThreshold(double val)
The threshold for the merging algorithm.
Definition: BinByBin.h:107
-
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
Definition: Utilities.cc:121
-
BinByBinFactory & SetAddThreshold(double val)
Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
Definition: BinByBin.h:99
+ + + + +
int main()
-
virtual std::string const & bin() const
Definition: Object.h:17
-
void AddSystematics_tt(CombineHarvester &cb)
-
void AddSystematics_ee_mm(CombineHarvester &cb)
+
Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
Definition: BinByBin.h:21
+
BinByBinFactory & SetAddThreshold(double val)
Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
Definition: BinByBin.h:99
+
BinByBinFactory & SetFixNorm(bool fix)
Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
Definition: BinByBin.h:124
+
BinByBinFactory & SetMergeThreshold(double val)
The threshold for the merging algorithm.
Definition: BinByBin.h:107
Automates the writing of datacards into directory structures.
Definition: CardWriter.h:50
-
std::vector< std::pair< int, std::string > > Categories
-
CombineHarvester & FilterProcs(Function func)
- - -
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
-
std::set< std::string > syst_name_set()
-
void set_rate(double const &rate)
Definition: Process.h:24
+
std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
Definition: CardWriter.cc:96
+ +
CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
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 ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
-
void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
Definition: Utilities.cc:78
- +
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
-
virtual std::string const & mass() const
Definition: Object.h:38
-
int main()
+
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
+
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)
+
std::set< std::string > channel_set()
+
CombineHarvester & FilterProcs(Function func)
+
std::set< std::string > syst_name_set()
+
void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
Definition: CardWriter.cc:96
- -
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.
Definition: Utilities.cc:281
+
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
+
virtual std::string const & process() const
Definition: Object.h:20
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual std::string const & mass() const
Definition: Object.h:38
+ +
void set_rate(double const &rate)
Definition: Process.h:24
+
double rate() const
Definition: Process.h:25
std::vector< std::string > ParseFileLines(std::string const &file_name)
Definition: Utilities.cc:224
+
void AddSystematics_ee_mm(CombineHarvester &cb)
+
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
Definition: Utilities.cc:121
+
void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
Definition: Utilities.cc:78
+
std::vector< std::pair< int, std::string > > Categories
void AddSystematics_et_mt(CombineHarvester &cb)
- -
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)
-
Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
Definition: BinByBin.h:21
- -
BinByBinFactory & SetFixNorm(bool fix)
Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
Definition: BinByBin.h:124
-
virtual std::string const & process() const
Definition: Object.h:20
-
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
+
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.
Definition: Utilities.cc:281
+
void AddSystematics_tt(CombineHarvester &cb)
void AddSystematics_em(CombineHarvester &cb)
-
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
+ + diff --git a/_s_over_b_tools_8cc.html b/_s_over_b_tools_8cc.html index a123365576f..f776b430074 100644 --- a/_s_over_b_tools_8cc.html +++ b/_s_over_b_tools_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/SOverBTools.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_s_over_b_tools_8cc_source.html b/_s_over_b_tools_8cc_source.html index f7c1e3fc096..584a13def41 100644 --- a/_s_over_b_tools_8cc_source.html +++ b/_s_over_b_tools_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/SOverBTools.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -116,24 +113,24 @@
8  double frac) {
9  double xmin = sig->GetXaxis()->GetXmin();
10  double xmax = sig->GetXaxis()->GetXmax();
-
11  double step_size = (xmax - xmin) / static_cast<double>(steps);
+
11  double step_size = (xmax - xmin) / static_cast<double>(steps);
12  double sig_tot = sig->Integral();
13  double lower_limit = 0;
14  double upper_limit = 0;
15  double ofrac = (1. - frac) / 2.;
16  for (unsigned j = 0; j < steps; ++j) {
17  double integral = ch::IntegrateFloatRange(
-
18  sig, xmin, xmin + (step_size * static_cast<double>(j)));
+
18  sig, xmin, xmin + (step_size * static_cast<double>(j)));
19  if (integral / sig_tot > ofrac) {
-
20  lower_limit = xmin + (step_size * static_cast<double>(j));
+
20  lower_limit = xmin + (step_size * static_cast<double>(j));
21  break;
22  }
23  }
24  for (unsigned j = 0; j < steps; ++j) {
25  double integral = ch::IntegrateFloatRange(
-
26  sig, xmax - (step_size * static_cast<double>(j)), xmax);
+
26  sig, xmax - (step_size * static_cast<double>(j)), xmax);
27  if (integral / sig_tot > ofrac) {
-
28  upper_limit = xmax - (step_size * static_cast<double>(j));
+
28  upper_limit = xmax - (step_size * static_cast<double>(j));
29  break;
30  }
31  }
@@ -155,16 +152,16 @@
47  return integral;
48 }
49 }
-
- + +
Definition: Algorithm.h:10
+
double IntegrateFloatRange(TH1F const *hist, double xmin, double xmax)
Definition: SOverBTools.cc:38
+ - -
Definition: Algorithm.h:10
- - -
double IntegrateFloatRange(TH1F const *hist, double xmin, double xmax)
Definition: SOverBTools.cc:38
+ + + diff --git a/_s_over_b_tools_8h.html b/_s_over_b_tools_8h.html index d0fd776c4b3..34981829c77 100644 --- a/_s_over_b_tools_8h.html +++ b/_s_over_b_tools_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/SOverBTools.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_s_over_b_tools_8h_source.html b/_s_over_b_tools_8h_source.html index eef43097e1c..9ec6c28fdd7 100644 --- a/_s_over_b_tools_8h_source.html +++ b/_s_over_b_tools_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/SOverBTools.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -124,16 +121,16 @@
16 }
17 
18 #endif
-
- - +
Definition: Algorithm.h:10
+
double IntegrateFloatRange(TH1F const *hist, double xmin, double xmax)
Definition: SOverBTools.cc:38
+ + - -
Definition: Algorithm.h:10
- -
double IntegrateFloatRange(TH1F const *hist, double xmin, double xmax)
Definition: SOverBTools.cc:38
+ + + diff --git a/_systematic_8cc.html b/_systematic_8cc.html index 90d137ec0eb..e90ee1e1ed5 100644 --- a/_systematic_8cc.html +++ b/_systematic_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Systematic.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_systematic_8cc_source.html b/_systematic_8cc_source.html index 38f17a5d6e7..c0cb4ad13af 100644 --- a/_systematic_8cc_source.html +++ b/_systematic_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Systematic.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -134,8 +131,8 @@
26  % val.name()
27  % val.type()
28  % value_fmt
-
29  % (bool(val.shape_d()) || bool(val.data_d()) || bool(val.pdf_d()))
-
30  % (bool(val.shape_u()) || bool(val.data_u()) || bool(val.pdf_u()));
+
29  % (bool(val.shape_d()) || bool(val.data_d()) || bool(val.pdf_d()))
+
30  % (bool(val.shape_u()) || bool(val.data_u()) || bool(val.pdf_u()));
31 }
32 }
33 
@@ -168,9 +165,9 @@
60  name_ = name;
61 }
62 
-
63 void swap(Systematic& first, Systematic& second) {
+
63 void swap(Systematic& first, Systematic& second) {
64  using std::swap;
-
65  swap(static_cast<Object&>(first), static_cast<Object&>(second));
+
65  swap(static_cast<Object&>(first), static_cast<Object&>(second));
66  swap(first.name_, second.name_);
67  swap(first.type_, second.type_);
68  swap(first.value_u_, second.value_u_);
@@ -199,13 +196,13 @@
91  data_d_(other.data_d_) {
92  TH1 *h_u = nullptr;
93  if (other.shape_u_) {
-
94  h_u = dynamic_cast<TH1*>(other.shape_u_->Clone());
+
94  h_u = dynamic_cast<TH1*>(other.shape_u_->Clone());
95  h_u->SetDirectory(0);
96  }
97  shape_u_ = std::unique_ptr<TH1>(h_u);
98  TH1 *h_d = nullptr;
99  if (other.shape_d_) {
-
100  h_d = dynamic_cast<TH1*>(other.shape_d_->Clone());
+
100  h_d = dynamic_cast<TH1*>(other.shape_d_->Clone());
101  h_d->SetDirectory(0);
102  }
103  shape_d_ = std::unique_ptr<TH1>(h_d);
@@ -284,8 +281,8 @@
176 
177 void Systematic::set_shapes(TH1 const& shape_u, TH1 const& shape_d,
178  TH1 const& nominal) {
-
179  set_shapes(std::unique_ptr<TH1>(static_cast<TH1*>(shape_u.Clone())),
-
180  std::unique_ptr<TH1>(static_cast<TH1*>(shape_d.Clone())),
+
179  set_shapes(std::unique_ptr<TH1>(static_cast<TH1*>(shape_u.Clone())),
+
180  std::unique_ptr<TH1>(static_cast<TH1*>(shape_d.Clone())),
181  &nominal);
182 }
183 
@@ -307,14 +304,14 @@
199 
200 std::unique_ptr<TH1> Systematic::ClonedShapeU() const {
201  if (!shape_u_) return std::unique_ptr<TH1>();
-
202  std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_u_->Clone()));
+
202  std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_u_->Clone()));
203  res->SetDirectory(0);
204  return res;
205 }
206 
207 std::unique_ptr<TH1> Systematic::ClonedShapeD() const {
208  if (!shape_d_) return std::unique_ptr<TH1>();
-
209  std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_d_->Clone()));
+
209  std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_d_->Clone()));
210  res->SetDirectory(0);
211  return res;
212 }
@@ -324,8 +321,8 @@
216  if (this->shape_u()) {
217  // Need to get the shape as a concrete type (TH1F or TH1D)
218  // A nice way to do this is just to use TH1D::Copy into a fresh TH1F
-
219  TH1F const* test_f = dynamic_cast<TH1F const*>(this->shape_u());
-
220  TH1D const* test_d = dynamic_cast<TH1D const*>(this->shape_u());
+
219  TH1F const* test_f = dynamic_cast<TH1F const*>(this->shape_u());
+
220  TH1D const* test_d = dynamic_cast<TH1D const*>(this->shape_u());
221  if (test_f) {
222  test_f->Copy(res);
223  } else if (test_d) {
@@ -342,8 +339,8 @@
234  if (this->shape_d()) {
235  // Need to get the shape as a concrete type (TH1F or TH1D)
236  // A nice way to do this is just to use TH1D::Copy into a fresh TH1F
-
237  TH1F const* test_f = dynamic_cast<TH1F const*>(this->shape_d());
-
238  TH1D const* test_d = dynamic_cast<TH1D const*>(this->shape_d());
+
237  TH1F const* test_f = dynamic_cast<TH1F const*>(this->shape_d());
+
238  TH1D const* test_d = dynamic_cast<TH1D const*>(this->shape_d());
239  if (test_f) {
240  test_f->Copy(res);
241  } else if (test_d) {
@@ -373,7 +370,7 @@
265  return ::format_syst(*this).str();
266 }
267 
-
268 std::ostream& operator<< (std::ostream &out, Systematic const& val) {
+
268 std::ostream& operator<< (std::ostream &out, Systematic const& val) {
269  out << ::format_syst(val);
270  return out;
271 }
@@ -389,53 +386,53 @@
281  shape_u_.swap(shape_d_);
282 }
283 }
-
- -
void set_pdf(RooAbsReal *pdf_u, RooAbsReal *pdf_d, RooAbsReal const *nominal)
Definition: Systematic.cc:194
-
RooAbsReal const * pdf_d() const
Definition: Systematic.h:54
-
RooAbsReal const * pdf_u() const
Definition: Systematic.h:52
-
bool asymm() const
Definition: Systematic.h:36
-
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Systematic.cc:251
- -
RooDataHist const * data_d() const
Definition: Systematic.h:50
-
std::unique_ptr< TH1 > ClonedShapeU() const
Definition: Systematic.cc:200
-
virtual std::string const & era() const
Definition: Object.h:29
-
virtual std::string const & bin() const
Definition: Object.h:17
+
#define FNERROR(x)
Definition: Logging.h:9
-
TH1 const * shape_d() const
Definition: Systematic.h:46
-
virtual std::string const & channel() const
Definition: Object.h:32
-
double value_u() const
Definition: Systematic.h:27
- -
void set_value_d(double const &value_d)
Definition: Systematic.h:29
-
virtual std::string const & analysis() const
Definition: Object.h:26
-
virtual std::string const & mass() const
Definition: Object.h:38
-
Definition: Algorithm.h:10
-
TH1F ShapeDAsTH1F() const
Definition: Systematic.cc:232
-
void set_data(RooDataHist *data_u, RooDataHist *data_d, RooDataHist const *nominal)
Definition: Systematic.cc:184
-
bool signal() const
Definition: Object.h:23
-
double value_d() const
Definition: Systematic.h:30
- -
void set_value_u(double const &value_u)
Definition: Systematic.h:26
-
virtual int bin_id() const
Definition: Object.h:35
-
void swap(Systematic &first, Systematic &second)
Definition: Systematic.cc:63
-
friend void swap(Systematic &first, Systematic &second)
Definition: Systematic.cc:63
-
std::string const & name() const
Definition: Systematic.h:21
-
void swap(CombineHarvester &first, CombineHarvester &second)
virtual std::string const & process() const
Definition: Object.h:20
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual int bin_id() const
Definition: Object.h:35
+
virtual std::string const & analysis() const
Definition: Object.h:26
+
virtual std::string const & era() const
Definition: Object.h:29
+
virtual std::string const & mass() const
Definition: Object.h:38
+
bool signal() const
Definition: Object.h:23
+
virtual std::string const & channel() const
Definition: Object.h:32
+ +
Systematic & operator=(Systematic other)
Definition: Systematic.cc:123
+
void set_pdf(RooAbsReal *pdf_u, RooAbsReal *pdf_d, RooAbsReal const *nominal)
Definition: Systematic.cc:194
+
double value_u() const
Definition: Systematic.h:28
+
RooDataHist const * data_d() const
Definition: Systematic.h:51
+
std::unique_ptr< TH1 > ClonedShapeU() const
Definition: Systematic.cc:200
+
std::string const & type() const
Definition: Systematic.h:25
std::unique_ptr< TH1 > ClonedShapeD() const
Definition: Systematic.cc:207
-
std::string to_string() const
Definition: Systematic.cc:264
-
TH1 const * shape_u() const
Definition: Systematic.h:38
- -
void set_name(std::string const &name)
Definition: Systematic.cc:54
-
RooDataHist const * data_u() const
Definition: Systematic.h:48
-
std::string const & type() const
Definition: Systematic.h:24
void set_shapes(std::unique_ptr< TH1 > shape_u, std::unique_ptr< TH1 > shape_d, TH1 const *nominal)
Definition: Systematic.cc:128
+
void set_value_d(double const &value_d)
Definition: Systematic.h:30
+ +
bool asymm() const
Definition: Systematic.h:37
+
TH1 const * shape_d() const
Definition: Systematic.h:47
+
void set_name(std::string const &name)
Definition: Systematic.cc:54
+
void set_data(RooDataHist *data_u, RooDataHist *data_d, RooDataHist const *nominal)
Definition: Systematic.cc:184
+
void set_value_u(double const &value_u)
Definition: Systematic.h:27
+
TH1 const * shape_u() const
Definition: Systematic.h:39
void SwapUpAndDown()
Definition: Systematic.cc:273
-
Systematic & operator=(Systematic other)
Definition: Systematic.cc:123
+
std::string const & name() const
Definition: Systematic.h:22
+
std::string to_string() const
Definition: Systematic.cc:264
+
RooAbsReal const * pdf_d() const
Definition: Systematic.h:55
+
RooAbsReal const * pdf_u() const
Definition: Systematic.h:53
+
RooDataHist const * data_u() const
Definition: Systematic.h:49
+
double value_d() const
Definition: Systematic.h:31
TH1F ShapeUAsTH1F() const
Definition: Systematic.cc:214
+
TH1F ShapeDAsTH1F() const
Definition: Systematic.cc:232
+ +
friend void swap(Systematic &first, Systematic &second)
Definition: Systematic.cc:63
+
static std::ostream & PrintHeader(std::ostream &out)
Definition: Systematic.cc:251
+
Definition: Algorithm.h:10
+
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
Definition: HistMapping.cc:70
+
void swap(Systematic &first, Systematic &second)
Definition: Systematic.cc:63
+
void swap(CombineHarvester &first, CombineHarvester &second)
+ + diff --git a/_systematic_8h.html b/_systematic_8h.html index 5184c578634..6655599c042 100644 --- a/_systematic_8h.html +++ b/_systematic_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Systematic.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -112,6 +109,7 @@
#include <memory>
#include <string>
#include "TH1.h"
+#include "RooAbsReal.h"
#include "RooDataHist.h"
#include "CombineHarvester/CombineTools/interface/MakeUnique.h"
#include "CombineHarvester/CombineTools/interface/Object.h"
diff --git a/_systematic_8h_source.html b/_systematic_8h_source.html index f665325d5f1..00c1d7bcb60 100644 --- a/_systematic_8h_source.html +++ b/_systematic_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Systematic.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- +
@@ -83,7 +80,7 @@
@@ -111,133 +108,140 @@
3 #include <memory>
4 #include <string>
5 #include "TH1.h"
-
6 #include "RooDataHist.h"
- - -
9 
-
10 namespace ch {
-
11 
-
12 class Systematic : public Object {
-
13  public:
-
14  Systematic();
-
15  ~Systematic();
-
16  Systematic(Systematic const& other);
-
17  Systematic(Systematic&& other);
- -
19 
-
20  void set_name(std::string const& name);
-
21  std::string const& name() const { return name_; }
-
22 
-
23  void set_type(std::string const& type) { type_ = type; }
-
24  std::string const& type() const { return type_; }
-
25 
-
26  void set_value_u(double const& value_u) { value_u_ = value_u; }
-
27  double value_u() const { return value_u_; }
-
28 
-
29  void set_value_d(double const& value_d) { value_d_ = value_d; }
-
30  double value_d() const { return value_d_; }
-
31 
-
32  void set_scale(double const& scale) { scale_ = scale; }
-
33  double scale() const { return scale_; }
-
34 
-
35  void set_asymm(bool const& asymm) { asymm_ = asymm; }
-
36  bool asymm() const { return asymm_; }
-
37 
-
38  TH1 const* shape_u() const { return shape_u_.get(); }
-
39 
-
40  std::unique_ptr<TH1> ClonedShapeU() const;
-
41  std::unique_ptr<TH1> ClonedShapeD() const;
-
42 
-
43  TH1F ShapeUAsTH1F() const;
-
44  TH1F ShapeDAsTH1F() const;
-
45 
-
46  TH1 const* shape_d() const { return shape_d_.get(); }
-
47 
-
48  RooDataHist const* data_u() const { return data_u_; }
-
49 
-
50  RooDataHist const* data_d() const { return data_d_; }
-
51 
-
52  RooAbsReal const* pdf_u() const { return pdf_u_; }
-
53 
-
54  RooAbsReal const* pdf_d() const { return pdf_d_; }
-
55 
-
56  void set_data(RooDataHist* data_u, RooDataHist* data_d,
-
57  RooDataHist const* nominal);
-
58 
-
59  void set_pdf(RooAbsReal* pdf_u, RooAbsReal* pdf_d,
-
60  RooAbsReal const* nominal);
-
61 
-
62  void set_shapes(std::unique_ptr<TH1> shape_u, std::unique_ptr<TH1> shape_d,
-
63  TH1 const* nominal);
-
64 
-
65  void set_shapes(TH1 const& shape_u, TH1 const& shape_d,
-
66  TH1 const& nominal);
-
67 
-
68  std::string to_string() const;
-
69  friend std::ostream& operator<< (std::ostream &out, Systematic const& val);
-
70  static std::ostream& PrintHeader(std::ostream &out);
+
6 #include "RooAbsReal.h"
+
7 #include "RooDataHist.h"
+ + +
10 
+
11 namespace ch {
+
12 
+
13 class Systematic : public Object {
+
14  public:
+
15  Systematic();
+
16  ~Systematic();
+
17  Systematic(Systematic const& other);
+
18  Systematic(Systematic&& other);
+ +
20 
+
21  void set_name(std::string const& name);
+
22  std::string const& name() const { return name_; }
+
23 
+
24  void set_type(std::string const& type) { type_ = type; }
+
25  std::string const& type() const { return type_; }
+
26 
+
27  void set_value_u(double const& value_u) { value_u_ = value_u; }
+
28  double value_u() const { return value_u_; }
+
29 
+
30  void set_value_d(double const& value_d) { value_d_ = value_d; }
+
31  double value_d() const { return value_d_; }
+
32 
+
33  void set_scale(double const& scale) { scale_ = scale; }
+
34  double scale() const { return scale_; }
+
35 
+
36  void set_asymm(bool const& asymm) { asymm_ = asymm; }
+
37  bool asymm() const { return asymm_; }
+
38 
+
39  TH1 const* shape_u() const { return shape_u_.get(); }
+
40 
+
41  std::unique_ptr<TH1> ClonedShapeU() const;
+
42  std::unique_ptr<TH1> ClonedShapeD() const;
+
43 
+
44  TH1F ShapeUAsTH1F() const;
+
45  TH1F ShapeDAsTH1F() const;
+
46 
+
47  TH1 const* shape_d() const { return shape_d_.get(); }
+
48 
+
49  RooDataHist const* data_u() const { return data_u_; }
+
50 
+
51  RooDataHist const* data_d() const { return data_d_; }
+
52 
+
53  RooAbsReal const* pdf_u() const { return pdf_u_; }
+
54 
+
55  RooAbsReal const* pdf_d() const { return pdf_d_; }
+
56 
+
57  void set_data(RooDataHist* data_u, RooDataHist* data_d,
+
58  RooDataHist const* nominal);
+
59 
+
60  void set_pdf(RooAbsReal* pdf_u, RooAbsReal* pdf_d,
+
61  RooAbsReal const* nominal);
+
62 
+
63  void set_shapes(std::unique_ptr<TH1> shape_u, std::unique_ptr<TH1> shape_d,
+
64  TH1 const* nominal);
+
65 
+
66  void set_shapes(TH1 const& shape_u, TH1 const& shape_d,
+
67  TH1 const& nominal);
+
68 
+
69  void set_param_str_ext(std::string const& param_str_ext) { param_str_ext_ = param_str_ext; }
+
70  std::string const& param_str_ext() const { return param_str_ext_; }
71 
-
72  void SwapUpAndDown();
-
73 
-
74  private:
-
75  std::string name_;
-
76  std::string type_;
-
77  double value_u_;
-
78  double value_d_;
-
79  double scale_;
-
80  bool asymm_;
-
81  std::unique_ptr<TH1> shape_u_;
-
82  std::unique_ptr<TH1> shape_d_;
-
83  RooAbsReal * pdf_u_;
-
84  RooAbsReal * pdf_d_;
-
85  RooDataHist * data_u_;
-
86  RooDataHist * data_d_;
-
87 
-
88  friend void swap(Systematic& first, Systematic& second);
-
89 };
-
90 }
-
91 
-
92 #endif
-
- -
void set_pdf(RooAbsReal *pdf_u, RooAbsReal *pdf_d, RooAbsReal const *nominal)
Definition: Systematic.cc:194
-
RooAbsReal const * pdf_d() const
Definition: Systematic.h:54
-
RooAbsReal const * pdf_u() const
Definition: Systematic.h:52
-
bool asymm() const
Definition: Systematic.h:36
-
static std::ostream & PrintHeader(std::ostream &out)
Definition: Systematic.cc:251
- -
RooDataHist const * data_d() const
Definition: Systematic.h:50
-
std::unique_ptr< TH1 > ClonedShapeU() const
Definition: Systematic.cc:200
-
void set_type(std::string const &type)
Definition: Systematic.h:23
-
TH1 const * shape_d() const
Definition: Systematic.h:46
-
double value_u() const
Definition: Systematic.h:27
- -
void set_asymm(bool const &asymm)
Definition: Systematic.h:35
-
void set_scale(double const &scale)
Definition: Systematic.h:32
-
void set_value_d(double const &value_d)
Definition: Systematic.h:29
+
72  std::string to_string() const;
+
73  friend std::ostream& operator<< (std::ostream &out, Systematic const& val);
+
74  static std::ostream& PrintHeader(std::ostream &out);
+
75 
+
76  void SwapUpAndDown();
+
77 
+
78  private:
+
79  std::string name_;
+
80  std::string type_;
+
81  double value_u_;
+
82  double value_d_;
+
83  double scale_;
+
84  bool asymm_;
+
85  std::unique_ptr<TH1> shape_u_;
+
86  std::unique_ptr<TH1> shape_d_;
+
87  RooAbsReal * pdf_u_;
+
88  RooAbsReal * pdf_d_;
+
89  RooDataHist * data_u_;
+
90  RooDataHist * data_d_;
+
91  std::string param_str_ext_;
+
92 
+
93  friend void swap(Systematic& first, Systematic& second);
+
94 };
+
95 }
+
96 
+
97 #endif
-
double scale() const
Definition: Systematic.h:33
-
friend std::ostream & operator<<(std::ostream &out, Systematic const &val)
Definition: Systematic.cc:268
-
Definition: Algorithm.h:10
-
TH1F ShapeDAsTH1F() const
Definition: Systematic.cc:232
-
void set_data(RooDataHist *data_u, RooDataHist *data_d, RooDataHist const *nominal)
Definition: Systematic.cc:184
-
double value_d() const
Definition: Systematic.h:30
- -
void set_value_u(double const &value_u)
Definition: Systematic.h:26
+ -
friend void swap(Systematic &first, Systematic &second)
Definition: Systematic.cc:63
-
std::string const & name() const
Definition: Systematic.h:21
+ +
friend std::ostream & operator<<(std::ostream &out, Systematic const &val)
Definition: Systematic.cc:268
+
void set_param_str_ext(std::string const &param_str_ext)
Definition: Systematic.h:69
+
Systematic & operator=(Systematic other)
Definition: Systematic.cc:123
+
void set_pdf(RooAbsReal *pdf_u, RooAbsReal *pdf_d, RooAbsReal const *nominal)
Definition: Systematic.cc:194
+
double value_u() const
Definition: Systematic.h:28
+
RooDataHist const * data_d() const
Definition: Systematic.h:51
+
std::unique_ptr< TH1 > ClonedShapeU() const
Definition: Systematic.cc:200
+
std::string const & type() const
Definition: Systematic.h:25
std::unique_ptr< TH1 > ClonedShapeD() const
Definition: Systematic.cc:207
-
std::string to_string() const
Definition: Systematic.cc:264
-
TH1 const * shape_u() const
Definition: Systematic.h:38
- -
void set_name(std::string const &name)
Definition: Systematic.cc:54
-
RooDataHist const * data_u() const
Definition: Systematic.h:48
-
std::string const & type() const
Definition: Systematic.h:24
void set_shapes(std::unique_ptr< TH1 > shape_u, std::unique_ptr< TH1 > shape_d, TH1 const *nominal)
Definition: Systematic.cc:128
+
void set_value_d(double const &value_d)
Definition: Systematic.h:30
+ +
bool asymm() const
Definition: Systematic.h:37
+
TH1 const * shape_d() const
Definition: Systematic.h:47
+
void set_name(std::string const &name)
Definition: Systematic.cc:54
+
void set_data(RooDataHist *data_u, RooDataHist *data_d, RooDataHist const *nominal)
Definition: Systematic.cc:184
+
void set_value_u(double const &value_u)
Definition: Systematic.h:27
+
TH1 const * shape_u() const
Definition: Systematic.h:39
void SwapUpAndDown()
Definition: Systematic.cc:273
-
Systematic & operator=(Systematic other)
Definition: Systematic.cc:123
+
std::string const & name() const
Definition: Systematic.h:22
+
std::string to_string() const
Definition: Systematic.cc:264
+
RooAbsReal const * pdf_d() const
Definition: Systematic.h:55
+
std::string const & param_str_ext() const
Definition: Systematic.h:70
+
RooAbsReal const * pdf_u() const
Definition: Systematic.h:53
+
void set_asymm(bool const &asymm)
Definition: Systematic.h:36
+
RooDataHist const * data_u() const
Definition: Systematic.h:49
+
void set_scale(double const &scale)
Definition: Systematic.h:33
+
double value_d() const
Definition: Systematic.h:31
TH1F ShapeUAsTH1F() const
Definition: Systematic.cc:214
+
TH1F ShapeDAsTH1F() const
Definition: Systematic.cc:232
+ +
void set_type(std::string const &type)
Definition: Systematic.h:24
+
double scale() const
Definition: Systematic.h:34
+
friend void swap(Systematic &first, Systematic &second)
Definition: Systematic.cc:63
+
static std::ostream & PrintHeader(std::ostream &out)
Definition: Systematic.cc:251
+
Definition: Algorithm.h:10
+ + diff --git a/_systematics_8h.html b/_systematics_8h.html index ec424b21330..e85da3cdb14 100644 --- a/_systematics_8h.html +++ b/_systematics_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Systematics.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_systematics_8h_source.html b/_systematics_8h_source.html index e259f180995..d47aded7035 100644 --- a/_systematics_8h_source.html +++ b/_systematics_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Systematics.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -377,76 +374,76 @@
269 }
270 
271 #endif
-
- -
static type get(ch::Process *p)
Definition: Systematics.h:13
-
double ValU(ch::Process *) const
Definition: Systematics.h:227
-
double ValU(ch::Process *p) const
Definition: Systematics.h:163
- + +
#define FNERROR(x)
Definition: Logging.h:9
+ +
virtual std::string const & process() const
Definition: Object.h:20
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual int bin_id() const
Definition: Object.h:35
+
virtual std::string const & analysis() const
Definition: Object.h:26
+
virtual std::string const & era() const
Definition: Object.h:29
+
virtual std::string const & mass() const
Definition: Object.h:38
+
virtual std::string const & channel() const
Definition: Object.h:32
+ -
static type get(ch::Process *p)
Definition: Systematics.h:33
-
std::set< std::tuple< typename T::type... > > GetTupleSet() const
Definition: Systematics.h:254
-
std::string type
Definition: Systematics.h:17
- -
bool Contains(ch::Process *p) const
Definition: Systematics.h:83
-
auto GetTuple(ch::Process *p) const -> decltype(std::make_tuple(T::get(p)...))
Definition: Systematics.h:125
-
static type get(ch::Process *p)
Definition: Systematics.h:38
+
std::string Args(ch::Process *) const
Definition: Systematics.h:175
+
std::string Formula(ch::Process *) const
Definition: Systematics.h:171
double ValD(ch::Process *p) const
Definition: Systematics.h:156
+
static SystMapAsymm< T... > init(std::vector< typename T::type >... input, double val_d, double val_u)
Definition: Systematics.h:179
+
bool Contains(ch::Process *p) const
Definition: Systematics.h:148
std::set< std::tuple< typename T::type... > > GetTupleSet() const
Definition: Systematics.h:187
-
virtual std::string const & era() const
Definition: Object.h:29
-
std::set< std::tuple< typename T::type... > > GetTupleSet() const
Definition: Systematics.h:119
-
static type get(ch::Process *p)
Definition: Systematics.h:28
- - -
virtual std::string const & bin() const
Definition: Object.h:17
- -
#define FNERROR(x)
Definition: Logging.h:9
-
SystMapFunc & operator()(std::vector< typename T::type >... input, std::string formula, std::string args)
Definition: Systematics.h:208
auto GetTuple(ch::Process *p) const -> decltype(std::make_tuple(T::get(p)...))
Definition: Systematics.h:193
+
double ValU(ch::Process *p) const
Definition: Systematics.h:163
+
SystMapAsymm & operator()(std::vector< typename T::type >... input, double val_d, double val_u)
Definition: Systematics.h:140
+
bool IsAsymm() const
Definition: Systematics.h:185
+
std::string Args(ch::Process *p) const
Definition: Systematics.h:238
-
virtual std::string const & channel() const
Definition: Object.h:32
+
bool Contains(ch::Process *p) const
Definition: Systematics.h:216
+
std::string Formula(ch::Process *p) const
Definition: Systematics.h:231
+
double ValU(ch::Process *) const
Definition: Systematics.h:227
+
double ValD(ch::Process *) const
Definition: Systematics.h:224
+
SystMapFunc & operator()(std::vector< typename T::type >... input, std::string formula, std::string args)
Definition: Systematics.h:208
auto GetTuple(ch::Process *p) const -> decltype(std::make_tuple(T::get(p)...))
Definition: Systematics.h:260
-
bool Contains(ch::Process *p) const
Definition: Systematics.h:148
- -
static type get(ch::Process *p)
Definition: Systematics.h:44
-
static type get(ch::Process *p)
Definition: Systematics.h:18
- -
bool IsAsymm() const
Definition: Systematics.h:117
- -
std::string type
Definition: Systematics.h:22
- +
std::set< std::tuple< typename T::type... > > GetTupleSet() const
Definition: Systematics.h:254
+
bool IsAsymm() const
Definition: Systematics.h:252
+
static SystMapFunc< T... > init(std::vector< typename T::type >... input, std::string formula, std::string args)
Definition: Systematics.h:246
+ +
std::set< std::tuple< typename T::type... > > GetTupleSet() const
Definition: Systematics.h:119
+
auto GetTuple(ch::Process *p) const -> decltype(std::make_tuple(T::get(p)...))
Definition: Systematics.h:125
+
bool Contains(ch::Process *p) const
Definition: Systematics.h:83
+
double ValD(ch::Process *) const
Definition: Systematics.h:99
+
std::string Args(ch::Process *) const
Definition: Systematics.h:107
+
std::string Formula(ch::Process *) const
Definition: Systematics.h:103
+
SystMap & operator()(std::vector< typename T::type >... input, double val)
Definition: Systematics.h:75
double ValU(ch::Process *p) const
Definition: Systematics.h:91
-
static type get(ch::Process *p)
Definition: Systematics.h:23
-
virtual std::string const & analysis() const
Definition: Object.h:26
+
bool IsAsymm() const
Definition: Systematics.h:117
static SystMap< T... > init(std::vector< typename T::type >... input, double val)
Definition: Systematics.h:111
- -
static SystMapFunc< T... > init(std::vector< typename T::type >... input, std::string formula, std::string args)
Definition: Systematics.h:246
-
virtual std::string const & mass() const
Definition: Object.h:38
-
SystMapAsymm & operator()(std::vector< typename T::type >... input, double val_d, double val_u)
Definition: Systematics.h:140
-
std::string type
Definition: Systematics.h:12
-
bool Contains(ch::Process *p) const
Definition: Systematics.h:216
- + +
static type get(ch::Process *p)
Definition: Systematics.h:44
+
void cross_imp(F f)
Definition: Systematics.h:49
+
std::vector< std::tuple< Ts... > > cross(std::vector< Ts > const &... in)
Definition: Systematics.h:60
Definition: Algorithm.h:10
-
std::string type
Definition: Systematics.h:32
-
std::string Formula(ch::Process *) const
Definition: Systematics.h:171
-
double ValD(ch::Process *) const
Definition: Systematics.h:99
-
std::string Formula(ch::Process *) const
Definition: Systematics.h:103
-
std::string type
Definition: Systematics.h:37
-
virtual int bin_id() const
Definition: Object.h:35
-
bool IsAsymm() const
Definition: Systematics.h:185
-
static SystMapAsymm< T... > init(std::vector< typename T::type >... input, double val_d, double val_u)
Definition: Systematics.h:179
-
std::string Args(ch::Process *) const
Definition: Systematics.h:175
-
bool IsAsymm() const
Definition: Systematics.h:252
-
std::string Formula(ch::Process *p) const
Definition: Systematics.h:231
-
double ValD(ch::Process *) const
Definition: Systematics.h:224
+
std::string type
Definition: Systematics.h:17
+
static type get(ch::Process *p)
Definition: Systematics.h:18
+ +
std::string type
Definition: Systematics.h:12
+
static type get(ch::Process *p)
Definition: Systematics.h:13
+ +
static type get(ch::Process *p)
Definition: Systematics.h:28
std::string type
Definition: Systematics.h:27
-
std::vector< std::tuple< Ts... > > cross(std::vector< Ts > const &... in)
Definition: Systematics.h:60
-
SystMap & operator()(std::vector< typename T::type >... input, double val)
Definition: Systematics.h:75
-
virtual std::string const & process() const
Definition: Object.h:20
-
std::string Args(ch::Process *) const
Definition: Systematics.h:107
- + +
static type get(ch::Process *p)
Definition: Systematics.h:23
+
std::string type
Definition: Systematics.h:22
+ +
std::string type
Definition: Systematics.h:32
+
static type get(ch::Process *p)
Definition: Systematics.h:33
+ +
static type get(ch::Process *p)
Definition: Systematics.h:38
+
std::string type
Definition: Systematics.h:37
+ + diff --git a/_t_file_i_o_8cc.html b/_t_file_i_o_8cc.html index 71e1849c38f..664da68c8e3 100644 --- a/_t_file_i_o_8cc.html +++ b/_t_file_i_o_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/TFileIO.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_t_file_i_o_8cc_source.html b/_t_file_i_o_8cc_source.html index 7d56cc8c4df..3de05b0ebb0 100644 --- a/_t_file_i_o_8cc_source.html +++ b/_t_file_i_o_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/TFileIO.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -132,7 +129,7 @@
24  FNERROR("TH1 " + path + " not found in " + file->GetName()));
25  }
26  std::unique_ptr<TH1> res(
-
27  dynamic_cast<TH1*>(obj));
+
27  dynamic_cast<TH1*>(obj));
28  TH1::AddDirectory(cur_status);
29  if (!res) {
30  gDirectory = backup_dir;
@@ -144,13 +141,13 @@
36  return res;
37 }
38 }
-
- - +
#define FNERROR(x)
Definition: Logging.h:9
+
Definition: Algorithm.h:10
std::unique_ptr< TH1 > GetClonedTH1(TFile *file, std::string const &path)
Definition: TFileIO.cc:12
- + + diff --git a/_t_file_i_o_8h.html b/_t_file_i_o_8h.html index 4dd69c26026..ab68345f67c 100644 --- a/_t_file_i_o_8h.html +++ b/_t_file_i_o_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/TFileIO.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_t_file_i_o_8h_source.html b/_t_file_i_o_8h_source.html index 5b985d70955..36ba3a711bf 100644 --- a/_t_file_i_o_8h_source.html +++ b/_t_file_i_o_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/TFileIO.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -175,7 +172,7 @@
67  throw std::runtime_error(FNERROR("File is invalid"));
68  }
69  file.cd();
-
70  T* obj_ptr = dynamic_cast<T*>(gDirectory->Get(objectpath.c_str()));
+
70  T* obj_ptr = dynamic_cast<T*>(gDirectory->Get(objectpath.c_str()));
71  if (!obj_ptr) {
72  throw std::runtime_error(
73  FNERROR("Object " + objectpath + " is missing or of wrong type"));
@@ -189,7 +186,7 @@
81  throw std::runtime_error(FNERROR("File is null or invalid"));
82  }
83  file->cd();
-
84  T* obj_ptr = dynamic_cast<T*>(gDirectory->Get(path.c_str()));
+
84  T* obj_ptr = dynamic_cast<T*>(gDirectory->Get(path.c_str()));
85  if (!obj_ptr) {
86  throw std::runtime_error(
87  FNERROR("Object " + path + " is missing or of wrong type"));
@@ -198,15 +195,15 @@
90 }
91 
92 #endif
-
- +
#define LAUNCH_FUNCTION_TIMER(x, y)
Conveniently initialise a ch::FnTimer instance.
Definition: Logging.h:67
#define FNERROR(x)
Definition: Logging.h:9
-
void WriteToTFile(T *ptr, TFile *file, std::string const &path)
Definition: TFileIO.h:31
-
T OpenFromTFile(std::string const &fullpath)
Definition: TFileIO.h:54
Definition: Algorithm.h:10
+
void WriteToTFile(T *ptr, TFile *file, std::string const &path)
Definition: TFileIO.h:31
std::unique_ptr< TH1 > GetClonedTH1(TFile *file, std::string const &path)
Definition: TFileIO.cc:12
- +
T OpenFromTFile(std::string const &fullpath)
Definition: TFileIO.h:54
+ + diff --git a/_utilities_8cc.html b/_utilities_8cc.html index b1ecd067175..01edce3dab3 100644 --- a/_utilities_8cc.html +++ b/_utilities_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Utilities.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_utilities_8cc_source.html b/_utilities_8cc_source.html index c2283ccfc82..3a7c379db80 100644 --- a/_utilities_8cc_source.html +++ b/_utilities_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/Utilities.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -156,7 +153,7 @@
48  params.resize(res.floatParsFinal().getSize());
49  for (int i = 0; i < res.floatParsFinal().getSize(); ++i) {
50  RooRealVar const* var =
-
51  dynamic_cast<RooRealVar const*>(res.floatParsFinal().at(i));
+
51  dynamic_cast<RooRealVar const*>(res.floatParsFinal().at(i));
52  params[i].set_name(std::string(var->GetName()));
53  params[i].set_val(var->getVal());
54  params[i].set_err_d(var->getErrorLo());
@@ -171,7 +168,7 @@
63  params.resize(res.floatParsFinal().getSize());
64  RooArgList const& rands = res.randomizePars();
65  for (int i = 0; i < res.floatParsFinal().getSize(); ++i) {
-
66  RooRealVar const* var = dynamic_cast<RooRealVar const*>(rands.at(i));
+
66  RooRealVar const* var = dynamic_cast<RooRealVar const*>(rands.at(i));
67  params[i].set_name(std::string(var->GetName()));
68  params[i].set_val(var->getVal());
69  params[i].set_err_d(var->getErrorLo());
@@ -266,7 +263,7 @@
158 RooDataHist TH1F2Data(TH1F const& hist, RooRealVar const& x,
159  std::string const& name) {
160  TH1F shape("tmp", "tmp", hist.GetNbinsX(), 0.,
-
161  static_cast<float>(hist.GetNbinsX()));
+
161  static_cast<float>(hist.GetNbinsX()));
162  for (int i = 1; i <= hist.GetNbinsX(); ++i) {
163  shape.SetBinContent(i, hist.GetBinContent(i));
164  }
@@ -278,7 +275,7 @@
170 TH1F RebinHist(TH1F const& hist) {
171  TH1::AddDirectory(0);
172  TH1F shape("tmp", "tmp", hist.GetNbinsX(), 0.,
-
173  static_cast<float>(hist.GetNbinsX()));
+
173  static_cast<float>(hist.GetNbinsX()));
174  for (int i = 1; i <= hist.GetNbinsX(); ++i) {
175  shape.SetBinContent(i, hist.GetBinContent(i));
176  shape.SetBinError(i, hist.GetBinError(i));
@@ -462,48 +459,48 @@
354  }
355 }
356 }
-
- -
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
-
std::vector< ch::Parameter > ExtractFitParameters(RooFitResult const &res)
Definition: Utilities.cc:46
-
void ForEachObj(Function func)
-
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
Definition: Utilities.cc:121
-
virtual void set_bin(std::string const &bin)
Definition: Object.h:16
-
bool is_float(std::string const &str)
Definition: Utilities.cc:241
-
virtual std::string const & era() const
Definition: Object.h:29
-
RooDataHist TH1F2Data(TH1F const &hist, RooRealVar const &x, std::string const &name)
Definition: Utilities.cc:158
- -
virtual std::string const & bin() const
Definition: Object.h:17
+
#define FNERROR(x)
Definition: Logging.h:9
-
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.
Definition: Utilities.cc:249
+
#define FNLOG(x)
Definition: Logging.h:13
+ + +
void ForEachObj(Function func)
+ +
virtual void set_analysis(std::string const &analysis)
Definition: Object.h:25
virtual void set_mass(std::string const &mass)
Definition: Object.h:37
-
virtual std::string const & channel() const
Definition: Object.h:32
+
virtual std::string const & process() const
Definition: Object.h:20
+
virtual void set_bin(std::string const &bin)
Definition: Object.h:16
+
virtual std::string const & bin() const
Definition: Object.h:17
+
virtual int bin_id() const
Definition: Object.h:35
virtual std::string const & analysis() const
Definition: Object.h:26
-
void ZeroNegativeBins(TH1 *h)
Definition: Utilities.cc:349
-
void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
Definition: Utilities.cc:78
-
TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
Definition: Utilities.cc:181
+
virtual std::string const & era() const
Definition: Object.h:29
virtual std::string const & mass() const
Definition: Object.h:38
-
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
Definition: Utilities.cc:18
-
void SetFromBinName(ch::Object *input, std::string parse_rules)
Definition: Utilities.cc:96
+
virtual void set_era(std::string const &era)
Definition: Object.h:28
+
virtual std::string const & channel() const
Definition: Object.h:32
+
virtual void set_channel(std::string const &channel)
Definition: Object.h:31
+
virtual void set_bin_id(int const &bin_id)
Definition: Object.h:34
Definition: Algorithm.h:10
-
virtual void set_analysis(std::string const &analysis)
Definition: Object.h:25
+
RooDataHist TH1F2Data(TH1F const &hist, RooRealVar const &x, std::string const &name)
Definition: Utilities.cc:158
+
void SetStandardBinName(ch::Object *obj, std::string pattern)
Definition: Utilities.cc:84
+
std::vector< std::string > ParseFileLines(std::string const &file_name)
Definition: Utilities.cc:224
+
TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
Definition: Utilities.cc:181
+
TH1F RebinHist(TH1F const &hist)
Definition: Utilities.cc:170
boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
Definition: Utilities.cc:313
+
std::vector< ch::Parameter > ExtractFitParameters(RooFitResult const &res)
Definition: Utilities.cc:46
bool HasNegativeBins(TH1 const *h)
Definition: Utilities.cc:339
-
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.
Definition: Utilities.cc:281
-
std::vector< std::string > ParseFileLines(std::string const &file_name)
Definition: Utilities.cc:224
-
virtual int bin_id() const
Definition: Object.h:35
-
std::vector< ch::Parameter > ExtractSampledFitParameters(RooFitResult const &res)
Definition: Utilities.cc:60
-
void SetStandardBinName(ch::Object *obj, std::string pattern)
Definition: Utilities.cc:84
-
virtual void set_bin_id(int const &bin_id)
Definition: Object.h:34
- - -
virtual void set_era(std::string const &era)
Definition: Object.h:28
- -
virtual std::string const & process() const
Definition: Object.h:20
-
virtual void set_channel(std::string const &channel)
Definition: Object.h:31
+
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
Definition: Utilities.cc:121
std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
Definition: Utilities.cc:191
-
#define FNLOG(x)
Definition: Logging.h:13
-
TH1F RebinHist(TH1F const &hist)
Definition: Utilities.cc:170
+
void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
Definition: Utilities.cc:78
+
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.
Definition: Utilities.cc:249
+
std::vector< ch::Parameter > ExtractSampledFitParameters(RooFitResult const &res)
Definition: Utilities.cc:60
+
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.
Definition: Utilities.cc:281
+
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
+
bool is_float(std::string const &str)
Definition: Utilities.cc:241
+
void ZeroNegativeBins(TH1 *h)
Definition: Utilities.cc:349
+
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
Definition: Utilities.cc:18
+
void SetFromBinName(ch::Object *input, std::string parse_rules)
Definition: Utilities.cc:96
+ + diff --git a/_utilities_8h.html b/_utilities_8h.html index f9120eee334..0ba2b462b27 100644 --- a/_utilities_8h.html +++ b/_utilities_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Utilities.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_utilities_8h_source.html b/_utilities_8h_source.html index b2e0e25e07f..5da6bca13c9 100644 --- a/_utilities_8h_source.html +++ b/_utilities_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/Utilities.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -284,42 +281,42 @@
242 }
243 
244 #endif
-
- -
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
-
std::vector< ch::Parameter > ExtractFitParameters(RooFitResult const &res)
Definition: Utilities.cc:46
-
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
Definition: Utilities.cc:121
+ -
bool is_float(std::string const &str)
Definition: Utilities.cc:241
-
static void print(const Tuple &t, std::stringstream &str)
Definition: Utilities.h:189
-
RooDataHist TH1F2Data(TH1F const &hist, RooRealVar const &x, std::string const &name)
Definition: Utilities.cc:158
-
static void print(const Tuple &t, std::stringstream &str)
Definition: Utilities.h:181
-
bool MatchingProcess(T const &first, U const &second)
Definition: Utilities.h:43
-
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.
Definition: Utilities.cc:249
-
std::vector< T > Join(std::vector< std::vector< T >> const &in)
Definition: Utilities.h:83
-
void ZeroNegativeBins(TH1 *h)
Definition: Utilities.cc:349
-
void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
Definition: Utilities.cc:78
-
TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
Definition: Utilities.cc:181
-
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
Definition: Utilities.cc:18
-
static void print(const Tuple &, std::stringstream &)
Definition: Utilities.h:198
-
void SetFromBinName(ch::Object *input, std::string parse_rules)
Definition: Utilities.cc:96
+
Definition: Algorithm.h:10
+
void SetProperties(T *first, U const *second)
Definition: Utilities.h:59
+
RooDataHist TH1F2Data(TH1F const &hist, RooRealVar const &x, std::string const &name)
Definition: Utilities.cc:158
+
void SetStandardBinName(ch::Object *obj, std::string pattern)
Definition: Utilities.cc:84
+
std::vector< std::string > ParseFileLines(std::string const &file_name)
Definition: Utilities.cc:224
+
TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
Definition: Utilities.cc:181
+
TH1F RebinHist(TH1F const &hist)
Definition: Utilities.cc:170
boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
Definition: Utilities.cc:313
+
std::vector< ch::Parameter > ExtractFitParameters(RooFitResult const &res)
Definition: Utilities.cc:46
+
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
+
std::vector< T > Join(std::vector< std::vector< T >> const &in)
Definition: Utilities.h:83
bool HasNegativeBins(TH1 const *h)
Definition: Utilities.cc:339
-
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.
Definition: Utilities.cc:281
-
std::vector< std::string > ParseFileLines(std::string const &file_name)
Definition: Utilities.cc:224
-
std::vector< ch::Parameter > ExtractSampledFitParameters(RooFitResult const &res)
Definition: Utilities.cc:60
-
void SetStandardBinName(ch::Object *obj, std::string pattern)
Definition: Utilities.cc:84
-
std::string Tuple2String(const std::tuple< Args... > &t)
Format any std::tuple as a string.
Definition: Utilities.h:214
- - +
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
Definition: Utilities.cc:121
std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
Definition: Utilities.cc:191
-
std::vector< T > Set2Vec(std::set< T > const &in)
Definition: Utilities.h:101
-
void SetProperties(T *first, U const *second)
Definition: Utilities.h:59
-
TH1F RebinHist(TH1F const &hist)
Definition: Utilities.cc:170
+
void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
Definition: Utilities.cc:78
+
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.
Definition: Utilities.cc:249
+
std::vector< ch::Parameter > ExtractSampledFitParameters(RooFitResult const &res)
Definition: Utilities.cc:60
+
bool MatchingProcess(T const &first, U const &second)
Definition: Utilities.h:43
+
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.
Definition: Utilities.cc:281
+
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
Definition: Utilities.cc:153
+
bool is_float(std::string const &str)
Definition: Utilities.cc:241
+
void ZeroNegativeBins(TH1 *h)
Definition: Utilities.cc:349
+
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
Definition: Utilities.cc:18
+
void SetFromBinName(ch::Object *input, std::string parse_rules)
Definition: Utilities.cc:96
+
static void print(const Tuple &, std::stringstream &)
Definition: Utilities.h:198
+
static void print(const Tuple &t, std::stringstream &str)
Definition: Utilities.h:189
+ +
static void print(const Tuple &t, std::stringstream &str)
Definition: Utilities.h:181
+ + diff --git a/_validation_tools_8cc.html b/_validation_tools_8cc.html index bae687cf980..9c2fc09dd59 100644 --- a/_validation_tools_8cc.html +++ b/_validation_tools_8cc.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/ValidationTools.cc File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_validation_tools_8cc_source.html b/_validation_tools_8cc_source.html index 6c8f8523038..15461eed65d 100644 --- a/_validation_tools_8cc_source.html +++ b/_validation_tools_8cc_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src/ValidationTools.cc Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -137,7 +134,7 @@
30  cb.ForEachSyst([&](ch::Systematic *sys){
31  if(sys->type()=="shape" && ( (sys->value_u() > 1. && sys->value_d() > 1.) || (sys->value_u() < 1. && sys->value_d() < 1.))){
-
32  jsobj["uncertVarySameDirect"][sys->name()][sys->bin()][sys->process()]={{"value_u",sys->value_u()},{"value_d",sys->value_d()}};
+
32  jsobj["uncertVarySameDirect"][sys->name()][sys->bin()][sys->process()]={{"value_u",sys->value_u()},{"value_d",sys->value_d()}};
33  }
34  });
35 }
@@ -145,8 +142,8 @@
38  cb.ForEachSyst([&](ch::Systematic *sys){
39  if(sys->type()=="shape" && ( (sys->value_u() > 1. && sys->value_d() > 1.) || (sys->value_u() < 1. && sys->value_d() < 1.))){
-
40  PrintSystematic(sys);
-
41  std::cout<<" Up/Down normalisations go in the same direction: up variation: "<<sys->value_u()<<", down variation: "<<sys->value_d()<<std::endl;
+
40  PrintSystematic(sys);
+
41  std::cout<<" Up/Down normalisations go in the same direction: up variation: "<<sys->value_u()<<", down variation: "<<sys->value_d()<<std::endl;
42  }
43  });
44 }
@@ -156,16 +153,16 @@
48  const TH1* hist_u;
49  const TH1* hist_d;
50  if(sys->type()=="shape" && ( fabs(sys->value_u() - sys->value_d()) < 0.0000001)){
-
51  hist_u = sys->shape_u();
-
52  hist_d = sys->shape_d();
-
53  bool is_same=1;
-
54  for(int i=1;i<=hist_u->GetNbinsX();i++){
-
55  if(fabs(hist_u->GetBinContent(i))+fabs(hist_d->GetBinContent(i))>0){
-
56  if(2*double(fabs(hist_u->GetBinContent(i)-hist_d->GetBinContent(i)))/(fabs(hist_u->GetBinContent(i))+fabs(hist_d->GetBinContent(i)))>0.001) is_same = 0;
+
51  hist_u = sys->shape_u();
+
52  hist_d = sys->shape_d();
+
53  bool is_same=1;
+
54  for(int i=1;i<=hist_u->GetNbinsX();i++){
+
55  if(fabs(hist_u->GetBinContent(i))+fabs(hist_d->GetBinContent(i))>0){
+
56  if(2*double(fabs(hist_u->GetBinContent(i)-hist_d->GetBinContent(i)))/(fabs(hist_u->GetBinContent(i))+fabs(hist_d->GetBinContent(i)))>0.001) is_same = 0;
57  }
58  }
59  if(is_same){
-
60  jsobj["uncertTemplSame"][sys->name()][sys->bin()][sys->process()]={{"value_u",sys->value_u()},{"value_d",sys->value_d()}};
+
60  jsobj["uncertTemplSame"][sys->name()][sys->bin()][sys->process()]={{"value_u",sys->value_u()},{"value_d",sys->value_d()}};
61  }
62  }
63  });
@@ -176,17 +173,17 @@
68  const TH1* hist_u;
69  const TH1* hist_d;
70  if(sys->type()=="shape" && ( fabs(sys->value_u() - sys->value_d()) < 0.0000001)){
-
71  hist_u = sys->shape_u();
-
72  hist_d = sys->shape_d();
-
73  bool is_same=1;
-
74  for(int i=1;i<=hist_u->GetNbinsX();i++){
-
75  if(fabs(hist_u->GetBinContent(i))+fabs(hist_d->GetBinContent(i))>0){
-
76  if(2*double(fabs(hist_u->GetBinContent(i)-hist_d->GetBinContent(i)))/(fabs(hist_u->GetBinContent(i))+fabs(hist_d->GetBinContent(i)))>0.001) is_same = 0;
+
71  hist_u = sys->shape_u();
+
72  hist_d = sys->shape_d();
+
73  bool is_same=1;
+
74  for(int i=1;i<=hist_u->GetNbinsX();i++){
+
75  if(fabs(hist_u->GetBinContent(i))+fabs(hist_d->GetBinContent(i))>0){
+
76  if(2*double(fabs(hist_u->GetBinContent(i)-hist_d->GetBinContent(i)))/(fabs(hist_u->GetBinContent(i))+fabs(hist_d->GetBinContent(i)))>0.001) is_same = 0;
77  }
78  }
79  if(is_same){
-
80  PrintSystematic(sys);
-
81  std::cout<<"Up/Down templates are identical: up variation: "<<sys->value_u()<<", down variation: "<<sys->value_d()<<std::endl;
+
80  PrintSystematic(sys);
+
81  std::cout<<"Up/Down templates are identical: up variation: "<<sys->value_u()<<", down variation: "<<sys->value_d()<<std::endl;
82  }
83  }
84  });
@@ -200,21 +197,21 @@
92  cb.ForEachProc([&](ch::Process *proc){
93  if(proc->rate()==0.){
94  empty_procs.push_back(proc);
-
95  if (jsobj["emptyProcessShape"][proc->bin()] !=NULL){
-
96  jsobj["emptyProcessShape"][proc->bin()].push_back(proc->process());
+
95  if (jsobj["emptyProcessShape"][proc->bin()] !=NULL){
+
96  jsobj["emptyProcessShape"][proc->bin()].push_back(proc->process());
97  } else {
-
98  jsobj["emptyProcessShape"][proc->bin()] = {proc->process()};
+
98  jsobj["emptyProcessShape"][proc->bin()] = {proc->process()};
99  }
100  }
101  });
-
102  cb.ForEachSyst([&](ch::Systematic *sys){
+
102  cb.ForEachSyst([&](ch::Systematic *sys){
103  bool no_check=0;
104  for( unsigned int i=0; i< empty_procs.size(); i++){
105  if ( MatchingProcess(*sys,*empty_procs.at(i)) ) no_check=1;
106  }
107  if(!no_check){
108  if(sys->type()=="shape" && (sys->value_u()==0. || sys->value_d()==0.)){
-
109  jsobj["emptySystematicShape"][sys->name()][sys->bin()][sys->process()]={{"value_u",sys->value_u()},{"value_d",sys->value_d()}};
+
109  jsobj["emptySystematicShape"][sys->name()][sys->bin()][sys->process()]={{"value_u",sys->value_u()},{"value_d",sys->value_d()}};
110  }
111  }
112  });
@@ -225,7 +222,7 @@
117  cb.ForEachProc([&](ch::Process *proc){
118  if(proc->rate()==0.){
119  empty_procs.push_back(proc);
-
120  PrintProc(proc);
+
120  PrintProc(proc);
121  std::cout<<" has 0 yield"<<std::endl;
122  }
123  });
@@ -236,8 +233,8 @@
128  }
129  if(!no_check){
130  if(sys->type()=="shape" && (sys->value_u()==0. || sys->value_d()==0.)){
-
131  PrintSystematic(sys);
-
132  std::cout<<" At least one empty histogram: up variation: "<<sys->value_u()<<" Down variation: "<<sys->value_d()<<std::endl;
+
131  PrintSystematic(sys);
+
132  std::cout<<" At least one empty histogram: up variation: "<<sys->value_u()<<" Down variation: "<<sys->value_d()<<std::endl;
133  }
134  }
135  });
@@ -256,8 +253,8 @@
148  if ( MatchingProcess(*sys,*empty_procs.at(i)) ) no_check=1;
149  }
150  if(!no_check && ((sys->type()=="shape" && (sys->value_u()-1 > maxNormEff || sys->value_u()-1 < -maxNormEff || sys->value_d()-1>maxNormEff || sys->value_d()-1< -maxNormEff)) || (sys->type()=="lnN" && (sys->value_u()-1 > maxNormEff || sys->value_u()-1 < - maxNormEff) ))){
-
151  PrintSystematic(sys);
-
152  std::cout<<"Uncertainty has a large normalisation effect: up variation: "<<sys->value_u()<<" Down variation: "<<sys->value_d()<<std::endl;
+
151  PrintSystematic(sys);
+
152  std::cout<<"Uncertainty has a large normalisation effect: up variation: "<<sys->value_u()<<" Down variation: "<<sys->value_d()<<std::endl;
153  }
154  });
155 }
@@ -275,7 +272,7 @@
167  if ( MatchingProcess(*sys,*empty_procs.at(i)) ) no_check=1;
168  }
169  if(!no_check && ((sys->type()=="shape" && (std::abs(sys->value_u()-1) > maxNormEff || std::abs(sys->value_d()-1)>maxNormEff)) || (sys->type()=="lnN" && (std::abs(sys->value_u()-1) > maxNormEff) ))){
-
170  jsobj["largeNormEff"][sys->name()][sys->bin()][sys->process()]={{"value_u",sys->value_u()},{"value_d",sys->value_d()}};
+
170  jsobj["largeNormEff"][sys->name()][sys->bin()][sys->process()]={{"value_u",sys->value_u()},{"value_d",sys->value_d()}};
171  }
172  });
173 }
@@ -320,9 +317,9 @@
212  const TH1* hist_d;
213  TH1F hist_nom;
214  if(sys->type()=="shape"){
-
215  hist_u = sys->shape_u();
-
216  hist_d = sys->shape_d();
-
217  hist_nom=cb.cp().bin({sys->bin()}).process({sys->process()}).GetShape();
+
215  hist_u = sys->shape_u();
+
216  hist_d = sys->shape_d();
+
217  hist_nom=cb.cp().bin({sys->bin()}).process({sys->process()}).GetShape();
218  hist_nom.Scale(1./hist_nom.Integral());
219  double up_diff=0;
220  double down_diff=0;
@@ -350,9 +347,9 @@
242  const TH1* hist_d;
243  TH1F hist_nom;
244  if(sys->type()=="shape"){
-
245  hist_u = sys->shape_u();
-
246  hist_d = sys->shape_d();
-
247  hist_nom=cb.cp().bin({sys->bin()}).process({sys->process()}).GetShape();
+
245  hist_u = sys->shape_u();
+
246  hist_d = sys->shape_d();
+
247  hist_nom=cb.cp().bin({sys->bin()}).process({sys->process()}).GetShape();
248  hist_nom.Scale(1./hist_nom.Integral());
249  double up_diff=0;
250  double down_diff=0;
@@ -425,45 +422,42 @@
317 }
318 
319 }
-
- -
void PrintSystematic(ch::Systematic *syst)
-
double rate() const
Definition: Process.h:25
-
void CheckEmptyShapes(CombineHarvester &cb, json &jsobj)
-
void ForEachProc(Function func)
-
void CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)
-
bool MatchingProcess(T const &first, U const &second)
Definition: Utilities.h:43
+ + + +
void ForEachSyst(Function func)
+ +
void ForEachProc(Function func)
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
std::set< std::string > bin_set()
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+ +
virtual std::string const & process() const
Definition: Object.h:20
virtual std::string const & bin() const
Definition: Object.h:17
-
TH1 const * shape_d() const
Definition: Systematic.h:46
-
void ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)
-
double value_u() const
Definition: Systematic.h:27
-
void ValidateCards(CombineHarvester &cb, std::string const &filename, double maxNormEff, double minSigFrac)
- +
RooAbsReal const * pdf() const
Definition: Process.h:60
+
double rate() const
Definition: Process.h:25
TH1 const * shape() const
Definition: Process.h:52
-
void CheckEmptyBins(CombineHarvester &cb, json &jsobj)
-
std::set< std::string > bin_set()
-
void PrintProc(ch::Process *proc)
-
void CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)
- + +
double value_u() const
Definition: Systematic.h:28
+
std::string const & type() const
Definition: Systematic.h:25
+
std::string const & name() const
Definition: Systematic.h:22
+
double value_d() const
Definition: Systematic.h:31
Definition: Algorithm.h:10
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
double value_d() const
Definition: Systematic.h:30
- - -
void CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)
-
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-
void ValidateShapeTemplates(CombineHarvester &cb, json &jsobj)
-
void ForEachSyst(Function func)
+
void ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)
+
void CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)
+
void PrintProc(ch::Process *proc)
+
void CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)
+
void ValidateCards(CombineHarvester &cb, std::string const &filename, double maxNormEff, double minSigFrac)
+
void CheckEmptyBins(CombineHarvester &cb, json &jsobj)
+
void CheckEmptyShapes(CombineHarvester &cb, json &jsobj)
+
bool MatchingProcess(T const &first, U const &second)
Definition: Utilities.h:43
nlohmann::json json
-
RooAbsReal const * pdf() const
Definition: Process.h:60
- -
std::string const & name() const
Definition: Systematic.h:21
-
virtual std::string const & process() const
Definition: Object.h:20
-
TH1 const * shape_u() const
Definition: Systematic.h:38
- -
std::string const & type() const
Definition: Systematic.h:24
+
void CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)
+
void PrintSystematic(ch::Systematic *syst)
+ + diff --git a/_validation_tools_8h.html b/_validation_tools_8h.html index da0267777a6..23028cbc305 100644 --- a/_validation_tools_8h.html +++ b/_validation_tools_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/ValidationTools.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_validation_tools_8h_source.html b/_validation_tools_8h_source.html index 7aa6c3cfa62..f26b2c72823 100644 --- a/_validation_tools_8h_source.html +++ b/_validation_tools_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/ValidationTools.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -151,25 +148,25 @@
43 }
44 
45 #endif
-
- -
void PrintSystematic(ch::Systematic *syst)
-
void CheckEmptyShapes(CombineHarvester &cb, json &jsobj)
-
void CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)
+ -
void ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)
-
void ValidateCards(CombineHarvester &cb, std::string const &filename, double maxNormEff, double minSigFrac)
-
void CheckEmptyBins(CombineHarvester &cb, json &jsobj)
-
void CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)
-
Definition: Algorithm.h:10
- -
void CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)
+ +
Definition: Algorithm.h:10
void ValidateShapeTemplates(CombineHarvester &cb, json &jsobj)
+
void ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)
+
void CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)
+
void CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)
+
void ValidateCards(CombineHarvester &cb, std::string const &filename, double maxNormEff, double minSigFrac)
+
void CheckEmptyBins(CombineHarvester &cb, json &jsobj)
+
void CheckEmptyShapes(CombineHarvester &cb, json &jsobj)
nlohmann::json json
- +
void CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)
+
void PrintSystematic(ch::Systematic *syst)
+ + diff --git a/_validation_tools_no_j_s_o_n_8h.html b/_validation_tools_no_j_s_o_n_8h.html index 137b4a63508..0b38d3b426f 100644 --- a/_validation_tools_no_j_s_o_n_8h.html +++ b/_validation_tools_no_j_s_o_n_8h.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/ValidationToolsNoJSON.h File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/_validation_tools_no_j_s_o_n_8h_source.html b/_validation_tools_no_j_s_o_n_8h_source.html index e72deebbdcd..03c411667ad 100644 --- a/_validation_tools_no_j_s_o_n_8h_source.html +++ b/_validation_tools_no_j_s_o_n_8h_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface/ValidationToolsNoJSON.h Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -135,20 +132,20 @@
27 }
28 
29 #endif
-
- -
void PrintSystematic(ch::Systematic *syst)
-
void CheckEmptyShapes(CombineHarvester &cb, json &jsobj)
-
void CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)
+ + +
Definition: Algorithm.h:10
+
void ValidateShapeTemplates(CombineHarvester &cb, json &jsobj)
void ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)
+
void CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)
+
void CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)
void ValidateCards(CombineHarvester &cb, std::string const &filename, double maxNormEff, double minSigFrac)
void CheckEmptyBins(CombineHarvester &cb, json &jsobj)
+
void CheckEmptyShapes(CombineHarvester &cb, json &jsobj)
void CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)
- -
Definition: Algorithm.h:10
- -
void CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)
-
void ValidateShapeTemplates(CombineHarvester &cb, json &jsobj)
+
void PrintSystematic(ch::Systematic *syst)
+ + diff --git a/annotated.html b/annotated.html index ba3e459670d..9c3fa7c61eb 100644 --- a/annotated.html +++ b/annotated.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Structures @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -110,37 +107,36 @@
[detail level 123]
- - - + + + - - - + + + - - + + - - + + - - - - - - - - - - + + + + + + + + +
 Nch
 Nsyst
 Canalysis
 Cbin
 Cbin_id
 Cbin
 Canalysis
 Cera
 Cchannel
 Cera
 Cmass
 Cprocess
 Cmass
 Cprocess
 Cbin_id
 CSystMap
 CSystMapAsymm
 CSystMapFunc
 Ntupleprint
 CTuplePrinter
 CTuplePrinter< Tuple, 0 >
 CTuplePrinter< Tuple, 1 >
 CTuplePrinter< Tuple, 1 >
 CTuplePrinter< Tuple, 0 >
 CAutoRebinTests for any bins below a certain threshold and if they exist merges them with neighborouring bins
 CBinByBinFactoryMerges bin uncertainties and creates bin-by-bin statistical uncertainties
 CCardWriterAutomates the writing of datacards into directory structures
 CCMSHistFuncFactory
 CCombineHarvester
 CCombineHarvester
 CHistMapping
 CFnTimerDetermine the total amount of time spent in a function
 CToken
 CHistMapping
 CObject
 CObservation
 CParameter
 CProcess
 CSOverBInfo
 CSystematic
 Npython
 CBkgInfo
 CColInfo
 CObject
 CObservation
 CParameter
 CProcess
 CSOverBInfo
 CSystematic
 CCMSHistFuncFactory
 CBkgInfo
 CColInfo
diff --git a/annotated_dup.js b/annotated_dup.js index 7df67e78be0..56989822175 100644 --- a/annotated_dup.js +++ b/annotated_dup.js @@ -1,7 +1,37 @@ var annotated_dup = [ - [ "ch", "namespacech.html", "namespacech" ], - [ "python", "namespacepython.html", null ], + [ "ch", "namespacech.html", [ + [ "syst", "namespacech_1_1syst.html", [ + [ "bin", "structch_1_1syst_1_1bin.html", "structch_1_1syst_1_1bin" ], + [ "analysis", "structch_1_1syst_1_1analysis.html", "structch_1_1syst_1_1analysis" ], + [ "era", "structch_1_1syst_1_1era.html", "structch_1_1syst_1_1era" ], + [ "channel", "structch_1_1syst_1_1channel.html", "structch_1_1syst_1_1channel" ], + [ "mass", "structch_1_1syst_1_1mass.html", "structch_1_1syst_1_1mass" ], + [ "process", "structch_1_1syst_1_1process.html", "structch_1_1syst_1_1process" ], + [ "bin_id", "classch_1_1syst_1_1bin__id.html", "classch_1_1syst_1_1bin__id" ], + [ "SystMap", "classch_1_1syst_1_1_syst_map.html", "classch_1_1syst_1_1_syst_map" ], + [ "SystMapAsymm", "classch_1_1syst_1_1_syst_map_asymm.html", "classch_1_1syst_1_1_syst_map_asymm" ], + [ "SystMapFunc", "classch_1_1syst_1_1_syst_map_func.html", "classch_1_1syst_1_1_syst_map_func" ] + ] ], + [ "tupleprint", "namespacech_1_1tupleprint.html", [ + [ "TuplePrinter", "structch_1_1tupleprint_1_1_tuple_printer.html", null ], + [ "TuplePrinter< Tuple, 1 >", "structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html", null ], + [ "TuplePrinter< Tuple, 0 >", "structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html", null ] + ] ], + [ "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" ], + [ "CombineHarvester", "classch_1_1_combine_harvester.html", "classch_1_1_combine_harvester" ], + [ "HistMapping", "structch_1_1_hist_mapping.html", "structch_1_1_hist_mapping" ], + [ "FnTimer", "classch_1_1_fn_timer.html", "classch_1_1_fn_timer" ], + [ "Object", "classch_1_1_object.html", "classch_1_1_object" ], + [ "Observation", "classch_1_1_observation.html", "classch_1_1_observation" ], + [ "Parameter", "classch_1_1_parameter.html", "classch_1_1_parameter" ], + [ "Process", "classch_1_1_process.html", "classch_1_1_process" ], + [ "SOverBInfo", "structch_1_1_s_over_b_info.html", "structch_1_1_s_over_b_info" ], + [ "Systematic", "classch_1_1_systematic.html", "classch_1_1_systematic" ], + [ "CMSHistFuncFactory", "classch_1_1_c_m_s_hist_func_factory.html", "classch_1_1_c_m_s_hist_func_factory" ] + ] ], [ "BkgInfo", "struct_bkg_info.html", "struct_bkg_info" ], [ "ColInfo", "struct_col_info.html", "struct_col_info" ] ]; \ No newline at end of file diff --git a/classch_1_1_auto_rebin.html b/classch_1_1_auto_rebin.html index f3f8313a074..ba8501fff2e 100644 --- a/classch_1_1_auto_rebin.html +++ b/classch_1_1_auto_rebin.html @@ -4,7 +4,7 @@ - + CombineHarvester: ch::AutoRebin Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -112,7 +109,7 @@

Tests for any bins below a certain threshold and if they exist merges them with neighborouring bins. More...

-

#include "CombineHarvester/CombineTools/interface/AutoRebin.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/AutoRebin.h"

@@ -148,7 +145,7 @@

Typical usage:

auto rebin = ch::AutoRebin()
     .SetEmptyBinThreshold(0.);
 rebin.Rebin(cb.cp().channel({"tt"}), cb);
-

See below for details on each class method.

+

See below for details on each class method.

Definition at line 19 of file AutoRebin.h.

Constructor & Destructor Documentation

diff --git a/classch_1_1_bin_by_bin_factory.html b/classch_1_1_bin_by_bin_factory.html index 51ec3b0cee1..a23606f63fe 100644 --- a/classch_1_1_bin_by_bin_factory.html +++ b/classch_1_1_bin_by_bin_factory.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::BinByBinFactory Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -112,7 +109,7 @@

Merges bin uncertainties and creates bin-by-bin statistical uncertainties. More...

-

#include "CombineHarvester/CombineTools/interface/BinByBin.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/BinByBin.h"

@@ -177,7 +174,7 @@ .SetFixNorm(true); bbb.MergeBinErrors(cb.cp().backgrounds()); bbb.AddBinByBin(cb.cp().backgrounds(), cb); -

See below for details on each class method.

+

See below for details on each class method.

Definition at line 21 of file BinByBin.h.

Constructor & Destructor Documentation

diff --git a/classch_1_1_c_m_s_hist_func_factory.html b/classch_1_1_c_m_s_hist_func_factory.html index 72e68f6e279..dbf2255eee3 100644 --- a/classch_1_1_c_m_s_hist_func_factory.html +++ b/classch_1_1_c_m_s_hist_func_factory.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::CMSHistFuncFactory Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -109,7 +106,7 @@
-

#include "CombineHarvester/CombinePdfs/interface/CMSHistFuncFactory.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombinePdfs/interface/CMSHistFuncFactory.h"

diff --git a/classch_1_1_card_writer.html b/classch_1_1_card_writer.html index 7013cd6c992..4ac4a08a93d 100644 --- a/classch_1_1_card_writer.html +++ b/classch_1_1_card_writer.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::CardWriter Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -112,7 +109,7 @@

Automates the writing of datacards into directory structures. More...

-

#include "CombineHarvester/CombineTools/interface/CardWriter.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/CardWriter.h"

@@ -137,8 +134,8 @@

A CardWriter is constructed with two strings which give patterns for where the datacard text and ROOT files should be located and how they should be named. These patterns can contain placeholders for the object metadata, e.g.:

ch::CardWriter writer(
    "$TAG/$MASS/$ANALYSIS_$CHANNEL_$BINID_$ERA.txt",
    "$TAG/common/$ANALYSIS_$CHANNEL.input_$ERA.root");
-

All of the standard metadata placeholders are supported. Then, assuming a CombineHarvester instance cb has already been configured, the cards are written with:

writer.WriteCards("LIMITS/cmb", cb);
-

The CardWriter will determine the sets of root files and datacards to create given the metadata of the objects in cb. The first argument of WriteCards is substituted into the $TAG placeholder. In this way multiple calls to WriteCards can produce output in different folders.

+

All of the standard metadata placeholders are supported. Then, assuming a CombineHarvester instance cb has already been configured, the cards are written with:

writer.WriteCards("LIMITS/cmb", cb);
+

The CardWriter will determine the sets of root files and datacards to create given the metadata of the objects in cb. The first argument of WriteCards is substituted into the $TAG placeholder. In this way multiple calls to WriteCards can produce output in different folders.

By default CardWriter will create any directories that are needed, but this behaviour can be switched off with the CreateDirectories method. Also note that any existing files with the same name will be over-written.

Note
The $MASS variable is treated differently than the others when constructing the list of output files. It is anticipated that a mass value of * should not give rise to actual files containing the * character, but rather implies an Object that is valid for any mass-point. It is commonly used to denote background processes that do not depend on the signal mass hypothesis. Therefore this class ignores objects with a mass value of * when determining which files to create, and when creating the files treats this object as matching any mass value. It is possible to alter or remove this behaviour by supplying a new list of wildcard values with the SetWildcardMasses method.
diff --git a/classch_1_1_combine_harvester.html b/classch_1_1_combine_harvester.html index c515e998979..13904d1f179 100644 --- a/classch_1_1_combine_harvester.html +++ b/classch_1_1_combine_harvester.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::CombineHarvester Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -111,7 +108,7 @@
-

#include "CombineHarvester/CombineTools/interface/CombineHarvester.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/CombineHarvester.h"

@@ -178,8 +175,7 @@ - @@ -64,10 +61,10 @@

Public Member Functions

void WriteDatacard (std::string const &name)
 
Filters

A collection of methods to filter the Observation, Process and Systematic objects

-

+

A collection of methods to filter the Observation, Process and Systematic objects

Each method here will remove objects from the Observation, Process and Systematic collections where the value of the relevant property is not equal to one of those specified in the list vec. Each methods returns a reference to the class instance, meaning it is simple to chain multiple filters. Note that filters only act on a set of objects where that property is defined. For example, the method systs_name will only filter the Systematic collection, and process will only filter the Process and Systematic collections.

Parameters
@@ -233,8 +229,7 @@ - @@ -372,6 +367,8 @@ + + @@ -449,7 +446,7 @@

-

Definition at line 31 of file CombineHarvester.cc.

+

Definition at line 32 of file CombineHarvester.cc.

@@ -472,7 +469,7 @@

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 51 of file CombineHarvester.cc.

+

Definition at line 52 of file CombineHarvester.cc.

@@ -546,7 +543,7 @@

Definition at line 67 of file CombineHarvester.cc.

+

Definition at line 68 of file CombineHarvester.cc.

@@ -566,7 +563,7 @@

-

Definition at line 78 of file CombineHarvester.cc.

+

Definition at line 79 of file CombineHarvester.cc.

@@ -609,7 +606,7 @@

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 87 of file CombineHarvester.cc.

+

Definition at line 88 of file CombineHarvester.cc.

@@ -813,7 +810,7 @@

-

Definition at line 56 of file CombineHarvester_Datacards.cc.

+

Definition at line 96 of file CombineHarvester_Datacards.cc.

@@ -843,7 +840,7 @@

-

Definition at line 36 of file CombineHarvester_Datacards.cc.

+

Definition at line 76 of file CombineHarvester_Datacards.cc.

@@ -873,7 +870,7 @@

-

Definition at line 529 of file CombineHarvester_Datacards.cc.

+

Definition at line 589 of file CombineHarvester_Datacards.cc.

@@ -903,7 +900,7 @@

-

Definition at line 715 of file CombineHarvester_Datacards.cc.

+

Definition at line 774 of file CombineHarvester_Datacards.cc.

@@ -923,7 +920,7 @@

-

Definition at line 536 of file CombineHarvester_Datacards.cc.

+

Definition at line 596 of file CombineHarvester_Datacards.cc.

@@ -1376,7 +1373,7 @@

-

Definition at line 647 of file CombineHarvester.h.

+

Definition at line 651 of file CombineHarvester.h.

@@ -1398,7 +1395,7 @@

-

Definition at line 655 of file CombineHarvester.h.

+

Definition at line 659 of file CombineHarvester.h.

@@ -1420,7 +1417,7 @@

-

Definition at line 663 of file CombineHarvester.h.

+

Definition at line 667 of file CombineHarvester.h.

@@ -1442,7 +1439,7 @@

-

Definition at line 670 of file CombineHarvester.h.

+

Definition at line 674 of file CombineHarvester.h.

@@ -1645,7 +1642,7 @@

Definition at line 595 of file CombineHarvester.h.

+

Definition at line 599 of file CombineHarvester.h.

@@ -1670,7 +1667,7 @@

Observation entries.

See also
SetFromAll
-

Definition at line 604 of file CombineHarvester.h.

+

Definition at line 608 of file CombineHarvester.h.

@@ -1695,7 +1692,7 @@

Process entries.

See also
SetFromAll
-

Definition at line 611 of file CombineHarvester.h.

+

Definition at line 615 of file CombineHarvester.h.

@@ -1720,7 +1717,7 @@

Systematic entries.

See also
SetFromAll
-

Definition at line 618 of file CombineHarvester.h.

+

Definition at line 622 of file CombineHarvester.h.

@@ -1740,7 +1737,7 @@

-

Definition at line 525 of file CombineHarvester_Evaluate.cc.

+

Definition at line 535 of file CombineHarvester_Evaluate.cc.

@@ -1760,7 +1757,7 @@

-

Definition at line 535 of file CombineHarvester_Evaluate.cc.

+

Definition at line 545 of file CombineHarvester_Evaluate.cc.

@@ -1780,7 +1777,7 @@

-

Definition at line 544 of file CombineHarvester_Evaluate.cc.

+

Definition at line 554 of file CombineHarvester_Evaluate.cc.

@@ -1803,7 +1800,7 @@

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 579 of file CombineHarvester_Evaluate.cc.

+

Definition at line 589 of file CombineHarvester_Evaluate.cc.

@@ -1823,7 +1820,7 @@

-

Definition at line 560 of file CombineHarvester_Evaluate.cc.

+

Definition at line 570 of file CombineHarvester_Evaluate.cc.

@@ -1842,7 +1839,7 @@

-

Definition at line 583 of file CombineHarvester_Evaluate.cc.

+

Definition at line 593 of file CombineHarvester_Evaluate.cc.

@@ -1872,7 +1869,7 @@

-

Definition at line 515 of file CombineHarvester_Evaluate.cc.

+

Definition at line 525 of file CombineHarvester_Evaluate.cc.

@@ -1894,7 +1891,7 @@

-

Definition at line 625 of file CombineHarvester.h.

+

Definition at line 629 of file CombineHarvester.h.

@@ -1916,7 +1913,7 @@

-

Definition at line 632 of file CombineHarvester.h.

+

Definition at line 636 of file CombineHarvester.h.

@@ -1938,7 +1935,7 @@

-

Definition at line 637 of file CombineHarvester.h.

+

Definition at line 641 of file CombineHarvester.h.

@@ -1960,7 +1957,7 @@

-

Definition at line 642 of file CombineHarvester.h.

+

Definition at line 646 of file CombineHarvester.h.

@@ -1980,7 +1977,7 @@

-

Definition at line 591 of file CombineHarvester_Evaluate.cc.

+

Definition at line 601 of file CombineHarvester_Evaluate.cc.

@@ -2010,7 +2007,7 @@

-

Definition at line 654 of file CombineHarvester_Evaluate.cc.

+

Definition at line 664 of file CombineHarvester_Evaluate.cc.

@@ -2030,7 +2027,7 @@

-

Definition at line 732 of file CombineHarvester_Evaluate.cc.

+

Definition at line 742 of file CombineHarvester_Evaluate.cc.

@@ -2050,7 +2047,7 @@

-

Definition at line 903 of file CombineHarvester.cc.

+

Definition at line 936 of file CombineHarvester.cc.

@@ -2080,7 +2077,7 @@

-

Definition at line 915 of file CombineHarvester.cc.

+

Definition at line 948 of file CombineHarvester.cc.

@@ -2116,7 +2113,7 @@

-

Definition at line 925 of file CombineHarvester.cc.

+

Definition at line 958 of file CombineHarvester.cc.

@@ -2156,7 +2153,7 @@

Definition at line 780 of file CombineHarvester_Evaluate.cc.

+

Definition at line 790 of file CombineHarvester_Evaluate.cc.

@@ -2196,7 +2193,7 @@

Definition at line 794 of file CombineHarvester_Evaluate.cc.

+

Definition at line 804 of file CombineHarvester_Evaluate.cc.

@@ -2235,7 +2232,7 @@

Definition at line 808 of file CombineHarvester_Evaluate.cc.

+

Definition at line 818 of file CombineHarvester_Evaluate.cc.

@@ -2263,7 +2260,7 @@

Definition at line 819 of file CombineHarvester_Evaluate.cc.

+

Definition at line 829 of file CombineHarvester_Evaluate.cc.

@@ -2284,7 +2281,7 @@

Definition at line 823 of file CombineHarvester_Evaluate.cc.

+

Definition at line 833 of file CombineHarvester_Evaluate.cc.

@@ -2303,7 +2300,7 @@

-

Definition at line 272 of file CombineHarvester_Evaluate.cc.

+

Definition at line 282 of file CombineHarvester_Evaluate.cc.

@@ -2322,7 +2319,7 @@

-

Definition at line 425 of file CombineHarvester_Evaluate.cc.

+

Definition at line 435 of file CombineHarvester_Evaluate.cc.

@@ -2423,7 +2420,7 @@

-

Definition at line 277 of file CombineHarvester_Evaluate.cc.

+

Definition at line 287 of file CombineHarvester_Evaluate.cc.

@@ -2524,7 +2521,7 @@

-

Definition at line 433 of file CombineHarvester_Evaluate.cc.

+

Definition at line 443 of file CombineHarvester_Evaluate.cc.

@@ -2554,7 +2551,7 @@

-

Definition at line 179 of file CombineHarvester_Evaluate.cc.

+

Definition at line 189 of file CombineHarvester_Evaluate.cc.

@@ -2584,7 +2581,7 @@

-

Definition at line 252 of file CombineHarvester_Evaluate.cc.

+

Definition at line 262 of file CombineHarvester_Evaluate.cc.

@@ -2694,6 +2691,42 @@

Definition at line 45 of file CombineHarvester_Creation.cc.

+ + + +

◆ AddSystVar()

+ +
+
+

CombineHarvesterFilterSysts (Function func)
 
Set producers

Methods that extract sets of properties from the Observation, Process and Systematic entries

-

+

Methods that extract sets of properties from the Observation, Process and Systematic entries

std::set< std::string > bin_set ()
 
 
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 AddSystVar (std::string const &name, double val, double err)
 
void AddSystFromProc (Process const &proc, std::string const &name, std::string const &type, bool asymm, double val_u, double val_d, std::string const &formula, std::string const &args)
 
template<class Map >
+ + + + + + + + + + + + + + + + + + + + + + + +
void ch::CombineHarvester::AddSystVar (std::string const & name,
double val,
double err 
)
+
+ +

Definition at line 137 of file CombineHarvester_Creation.cc.

+
@@ -2802,7 +2835,7 @@

-

Definition at line 678 of file CombineHarvester.h.

+

Definition at line 682 of file CombineHarvester.h.

@@ -2838,7 +2871,7 @@

-

Definition at line 147 of file CombineHarvester_Creation.cc.

+

Definition at line 159 of file CombineHarvester_Creation.cc.

@@ -2880,7 +2913,7 @@

-

Definition at line 181 of file CombineHarvester_Creation.cc.

+

Definition at line 193 of file CombineHarvester_Creation.cc.

@@ -2910,7 +2943,7 @@

-

Definition at line 199 of file CombineHarvester_Creation.cc.

+

Definition at line 211 of file CombineHarvester_Creation.cc.

@@ -2940,7 +2973,7 @@

-

Definition at line 176 of file CombineHarvester_Creation.cc.

+

Definition at line 188 of file CombineHarvester_Creation.cc.

@@ -2960,7 +2993,7 @@

-

Definition at line 245 of file CombineHarvester_Creation.cc.

+

Definition at line 257 of file CombineHarvester_Creation.cc.

@@ -2980,7 +3013,7 @@

-

Definition at line 249 of file CombineHarvester_Creation.cc.

+

Definition at line 261 of file CombineHarvester_Creation.cc.

@@ -3000,7 +3033,7 @@

-

Definition at line 253 of file CombineHarvester_Creation.cc.

+

Definition at line 265 of file CombineHarvester_Creation.cc.

@@ -3039,7 +3072,7 @@

AddSyst()

-

Definition at line 137 of file CombineHarvester_Creation.cc.

+

Definition at line 149 of file CombineHarvester_Creation.cc.

@@ -3059,7 +3092,7 @@

-

Definition at line 228 of file CombineHarvester_Creation.cc.

+

Definition at line 240 of file CombineHarvester_Creation.cc.

@@ -3098,7 +3131,7 @@

Deprecated:
Please use the standalone ch::BinByBinFactory tool, defined in CombineTools/interface/BinByBin.h
-

Definition at line 219 of file CombineHarvester_Creation.cc.

+

Definition at line 231 of file CombineHarvester_Creation.cc.

@@ -3137,7 +3170,7 @@

Deprecated:
Please use the standalone ch::BinByBinFactory tool, defined in CombineTools/interface/BinByBin.h
-

Definition at line 214 of file CombineHarvester_Creation.cc.

+

Definition at line 226 of file CombineHarvester_Creation.cc.

@@ -3170,7 +3203,7 @@

Deprecated:
Please use the standalone ch::BinByBinFactory tool, defined in CombineTools/interface/BinByBin.h
-

Definition at line 236 of file CombineHarvester_Creation.cc.

+

Definition at line 248 of file CombineHarvester_Creation.cc.

@@ -3212,7 +3245,7 @@

-

Definition at line 875 of file CombineHarvester.cc.

+

Definition at line 908 of file CombineHarvester.cc.

@@ -3242,7 +3275,7 @@

-

Definition at line 881 of file CombineHarvester.cc.

+

Definition at line 914 of file CombineHarvester.cc.

@@ -3261,7 +3294,7 @@

-

Definition at line 889 of file CombineHarvester.cc.

+

Definition at line 922 of file CombineHarvester.cc.

@@ -3291,7 +3324,7 @@

-

Definition at line 897 of file CombineHarvester.cc.

+

Definition at line 930 of file CombineHarvester.cc.

@@ -3330,7 +3363,7 @@

-

Definition at line 35 of file CombineHarvester.cc.

+

Definition at line 36 of file CombineHarvester.cc.

diff --git a/classch_1_1_combine_harvester.js b/classch_1_1_combine_harvester.js index 066e25c589b..5e340900c08 100644 --- a/classch_1_1_combine_harvester.js +++ b/classch_1_1_combine_harvester.js @@ -90,6 +90,7 @@ var classch_1_1_combine_harvester = [ "GetRateCorrelation", "classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0", null ], [ "AddObservations", "classch_1_1_combine_harvester.html#a8d7ccde30bda35ec084f4e38b923ef23", null ], [ "AddProcesses", "classch_1_1_combine_harvester.html#a1ecb940a59ea7a2039956a07882e9ccc", null ], + [ "AddSystVar", "classch_1_1_combine_harvester.html#a2dcd4e28456978a5b876ea76acb24c37", null ], [ "AddSystFromProc", "classch_1_1_combine_harvester.html#a00bd4490f33ab0ae404fb46a8cbd9dfe", null ], [ "AddSyst", "classch_1_1_combine_harvester.html#aab26f47e06ee53fcf1aab5c0940e916f", null ], [ "ExtractShapes", "classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0", null ], diff --git a/classch_1_1_fn_timer.html b/classch_1_1_fn_timer.html index 9271708a56a..7c1b973b68b 100644 --- a/classch_1_1_fn_timer.html +++ b/classch_1_1_fn_timer.html @@ -4,7 +4,7 @@ - + CombineHarvester: ch::FnTimer Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -113,7 +110,7 @@

Determine the total amount of time spent in a function. More...

-

#include "CombineHarvester/CombineTools/interface/Logging.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Logging.h"

diff --git a/classch_1_1_fn_timer_1_1_token.html b/classch_1_1_fn_timer_1_1_token.html index 04618c09a0c..ded58279b30 100644 --- a/classch_1_1_fn_timer_1_1_token.html +++ b/classch_1_1_fn_timer_1_1_token.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::FnTimer::Token Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Data Structures

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -109,7 +106,7 @@
-

#include "CombineHarvester/CombineTools/interface/Logging.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Logging.h"

diff --git a/classch_1_1_object.html b/classch_1_1_object.html index 5c796b638f5..4260dfbac86 100644 --- a/classch_1_1_object.html +++ b/classch_1_1_object.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::Object Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -110,7 +107,7 @@
-

#include "CombineHarvester/CombineTools/interface/Object.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Object.h"

+ Inheritance diagram for ch::Object:
@@ -177,8 +174,8 @@   virtual std::map< std::string, std::string > const & all_attributes () const   -virtual const std::string attribute (std::string const &attr_label) const -  +virtual std::string const attribute (std::string const &attr_label) const +  @@ -857,8 +854,8 @@

-

◆ attribute()

+ +

◆ attribute()

@@ -867,7 +864,7 @@

Friends

- + diff --git a/classch_1_1_object.js b/classch_1_1_object.js index 4dec3c43a34..68205905f30 100644 --- a/classch_1_1_object.js +++ b/classch_1_1_object.js @@ -25,6 +25,6 @@ var classch_1_1_object = [ "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#af6956eda45da72f747aeee28fadfe4fe", null ], - [ "attribute", "classch_1_1_object.html#a92bcd99a8c7a5e565d713387bbd954d2", null ], + [ "attribute", "classch_1_1_object.html#a3f131c3c63a86f91cab1d2fb56c86bb9", null ], [ "swap", "classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603", null ] ]; \ No newline at end of file diff --git a/classch_1_1_observation.html b/classch_1_1_observation.html index 28664c112f2..55505464ccf 100644 --- a/classch_1_1_observation.html +++ b/classch_1_1_observation.html @@ -4,7 +4,7 @@ - + CombineHarvester: ch::Observation Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@
virtual const std::string ch::Object::attribute virtual std::string const ch::Object::attribute ( std::string const &  attr_label)
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- +
@@ -83,7 +80,7 @@
@@ -111,7 +108,7 @@
-

#include "CombineHarvester/CombineTools/interface/Observation.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Observation.h"

+ Inheritance diagram for ch::Observation:
@@ -209,8 +206,8 @@   virtual std::map< std::string, std::string > const & all_attributes () const   -virtual const std::string attribute (std::string const &attr_label) const -  +virtual std::string const attribute (std::string const &attr_label) const +  diff --git a/classch_1_1_parameter.html b/classch_1_1_parameter.html index 4c37cfbdae7..8b50832230a 100644 --- a/classch_1_1_parameter.html +++ b/classch_1_1_parameter.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::Parameter Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Static Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- +
@@ -83,7 +80,7 @@
@@ -111,7 +108,7 @@
-

#include "CombineHarvester/CombineTools/interface/Parameter.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Parameter.h"

diff --git a/classch_1_1_process.html b/classch_1_1_process.html index 6f674eb56e8..c9aa3e7b330 100644 --- a/classch_1_1_process.html +++ b/classch_1_1_process.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::Process Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -111,7 +108,7 @@
-

#include "CombineHarvester/CombineTools/interface/Process.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Process.h"

+ Inheritance diagram for ch::Process:
@@ -224,8 +221,8 @@   virtual std::map< std::string, std::string > const & all_attributes () const   -virtual const std::string attribute (std::string const &attr_label) const -  +virtual std::string const attribute (std::string const &attr_label) const +  diff --git a/classch_1_1_systematic.html b/classch_1_1_systematic.html index f344eaead82..e7e6b1474d9 100644 --- a/classch_1_1_systematic.html +++ b/classch_1_1_systematic.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::Systematic Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Static Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- +
@@ -83,7 +80,7 @@
@@ -111,7 +108,7 @@
-

#include "CombineHarvester/CombineTools/interface/Systematic.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematic.h"

+ Inheritance diagram for ch::Systematic:
@@ -188,6 +185,10 @@   void set_shapes (TH1 const &shape_u, TH1 const &shape_d, TH1 const &nominal)   +void set_param_str_ext (std::string const &param_str_ext) +  +std::string const & param_str_ext () const +  std::string to_string () const   void SwapUpAndDown () @@ -243,8 +244,8 @@   virtual std::map< std::string, std::string > const & all_attributes () const   -virtual const std::string attribute (std::string const &attr_label) const -  +virtual std::string const attribute (std::string const &attr_label) const +  @@ -260,7 +261,7 @@

Static Public Member Functions

Detailed Description

-

Definition at line 12 of file Systematic.h.

+

Definition at line 13 of file Systematic.h.

Constructor & Destructor Documentation

◆ Systematic() [1/3]

@@ -404,7 +405,7 @@

-

Definition at line 21 of file Systematic.h.

+

Definition at line 22 of file Systematic.h.

@@ -432,7 +433,7 @@

-

Definition at line 23 of file Systematic.h.

+

Definition at line 24 of file Systematic.h.

@@ -459,7 +460,7 @@

-

Definition at line 24 of file Systematic.h.

+

Definition at line 25 of file Systematic.h.

@@ -487,7 +488,7 @@

-

Definition at line 26 of file Systematic.h.

+

Definition at line 27 of file Systematic.h.

@@ -514,7 +515,7 @@

-

Definition at line 27 of file Systematic.h.

+

Definition at line 28 of file Systematic.h.

@@ -542,7 +543,7 @@

-

Definition at line 29 of file Systematic.h.

+

Definition at line 30 of file Systematic.h.

@@ -569,7 +570,7 @@

-

Definition at line 30 of file Systematic.h.

+

Definition at line 31 of file Systematic.h.

@@ -597,7 +598,7 @@

-

Definition at line 32 of file Systematic.h.

+

Definition at line 33 of file Systematic.h.

@@ -624,7 +625,7 @@

-

Definition at line 33 of file Systematic.h.

+

Definition at line 34 of file Systematic.h.

@@ -652,7 +653,7 @@

-

Definition at line 35 of file Systematic.h.

+

Definition at line 36 of file Systematic.h.

@@ -679,7 +680,7 @@

-

Definition at line 36 of file Systematic.h.

+

Definition at line 37 of file Systematic.h.

@@ -706,7 +707,7 @@

-

Definition at line 38 of file Systematic.h.

+

Definition at line 39 of file Systematic.h.

@@ -809,7 +810,7 @@

-

Definition at line 46 of file Systematic.h.

+

Definition at line 47 of file Systematic.h.

@@ -836,7 +837,7 @@

-

Definition at line 48 of file Systematic.h.

+

Definition at line 49 of file Systematic.h.

@@ -863,7 +864,7 @@

-

Definition at line 50 of file Systematic.h.

+

Definition at line 51 of file Systematic.h.

@@ -890,7 +891,7 @@

-

Definition at line 52 of file Systematic.h.

+

Definition at line 53 of file Systematic.h.

@@ -917,7 +918,7 @@

-

Definition at line 54 of file Systematic.h.

+

Definition at line 55 of file Systematic.h.

@@ -1063,6 +1064,61 @@

Definition at line 177 of file Systematic.cc.

+ + + +

◆ set_param_str_ext()

+ +
+
+ + + + + +
+ + + + + + + + +
void ch::Systematic::set_param_str_ext (std::string const & param_str_ext)
+
+inline
+
+ +

Definition at line 69 of file Systematic.h.

+ +
+
+ +

◆ param_str_ext()

+ +
+
+ + + + + +
+ + + + + + + +
std::string const& ch::Systematic::param_str_ext () const
+
+inline
+
+ +

Definition at line 70 of file Systematic.h.

+
diff --git a/classch_1_1_systematic.js b/classch_1_1_systematic.js index a8af814e5bd..8e2b955e530 100644 --- a/classch_1_1_systematic.js +++ b/classch_1_1_systematic.js @@ -31,6 +31,8 @@ var classch_1_1_systematic = [ "set_pdf", "classch_1_1_systematic.html#a15b322bf20273a650dbdaa4316eb013c", null ], [ "set_shapes", "classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d", null ], [ "set_shapes", "classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661", null ], + [ "set_param_str_ext", "classch_1_1_systematic.html#a0c0e9adce37196093c5bc303f78f4d08", null ], + [ "param_str_ext", "classch_1_1_systematic.html#a995bc6ca55d509c76ba92322631e730b", null ], [ "to_string", "classch_1_1_systematic.html#a8d1cceb924cb5709221afef970778236", null ], [ "SwapUpAndDown", "classch_1_1_systematic.html#a838d5c14e2be2610010e7354eb706fae", null ], [ "operator<<", "classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8", null ], diff --git a/classch_1_1syst_1_1_syst_map.html b/classch_1_1syst_1_1_syst_map.html index 3bb7a5ee299..7823f593e4d 100644 --- a/classch_1_1syst_1_1_syst_map.html +++ b/classch_1_1syst_1_1_syst_map.html @@ -4,7 +4,7 @@ - + CombineHarvester: ch::syst::SystMap< T > Class Template Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -110,7 +107,7 @@
-

#include "CombineHarvester/CombineTools/interface/Systematics.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

diff --git a/classch_1_1syst_1_1_syst_map_asymm.html b/classch_1_1syst_1_1_syst_map_asymm.html index a425cba2fe2..a5117d7f6e4 100644 --- a/classch_1_1syst_1_1_syst_map_asymm.html +++ b/classch_1_1syst_1_1_syst_map_asymm.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::SystMapAsymm< T > Class Template Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -110,7 +107,7 @@
-

#include "CombineHarvester/CombineTools/interface/Systematics.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

diff --git a/classch_1_1syst_1_1_syst_map_func.html b/classch_1_1syst_1_1_syst_map_func.html index 7a91b613fc3..89a820d6613 100644 --- a/classch_1_1syst_1_1_syst_map_func.html +++ b/classch_1_1syst_1_1_syst_map_func.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::SystMapFunc< T > Class Template Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -110,7 +107,7 @@
-

#include "CombineHarvester/CombineTools/interface/Systematics.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

diff --git a/classch_1_1syst_1_1bin__id.html b/classch_1_1syst_1_1bin__id.html index 9943c5a4274..a3d09e2f90d 100644 --- a/classch_1_1syst_1_1bin__id.html +++ b/classch_1_1syst_1_1bin__id.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::bin_id Class Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Member Functions

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -110,7 +107,7 @@
-

#include "CombineHarvester/CombineTools/interface/Systematics.h"

+

#include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

diff --git a/classes.html b/classes.html index 02e487af440..716adae3952 100644 --- a/classes.html +++ b/classes.html @@ -4,7 +4,7 @@ - +CombineHarvester: Data Structure Index @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

Public Types

- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
- + @@ -83,7 +80,7 @@
@@ -106,75 +103,42 @@
Data Structure Index
-
a | b | c | e | f | h | m | o | p | s | t
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  a  
-
channel (ch::syst)   
  m  
-
Process (ch)   TuplePrinter (ch::tupleprint)   
CMSHistFuncFactory (ch)   
  s  
-
TuplePrinter< Tuple, 0 > (ch::tupleprint)   
analysis (ch::syst)   ColInfo   mass (ch::syst)   TuplePrinter< Tuple, 1 > (ch::tupleprint)   
AutoRebin (ch)   CombineHarvester (ch)   
  o  
-
SOverBInfo (ch)   
  b  
-
  e  
-
Systematic (ch)   
Object (ch)   SystMap (ch::syst)   
bin (ch::syst)   era (ch::syst)   Observation (ch)   SystMapAsymm (ch::syst)   
bin_id (ch::syst)   
  f  
-
  p  
-
SystMapFunc (ch::syst)   
BinByBinFactory (ch)   
  t  
-
BkgInfo   FnTimer (ch)   Parameter (ch)   
  c  
-
  h  
-
process (ch::syst)   FnTimer::Token (ch)   
CardWriter (ch)   HistMapping (ch)   
-
a | b | c | e | f | h | m | o | p | s | t
+
A | B | C | E | F | H | M | O | P | S | T
+
diff --git a/deprecated.html b/deprecated.html index 3bbe3d00fe4..2a482b7ea45 100644 --- a/deprecated.html +++ b/deprecated.html @@ -4,7 +4,7 @@ - + CombineHarvester: Deprecated List @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/dir_0a870e65c9e7f54fc0acb33d59ad08b1.html b/dir_0a870e65c9e7f54fc0acb33d59ad08b1.html index 7d6dab29a63..ac63f6acc7c 100644 --- a/dir_0a870e65c9e7f54fc0acb33d59ad08b1.html +++ b/dir_0a870e65c9e7f54fc0acb33d59ad08b1.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_49e56c817e5e54854c35e136979f97ca.html b/dir_49e56c817e5e54854c35e136979f97ca.html index 61b3c7b7583..1356e6e22b5 100644 --- a/dir_49e56c817e5e54854c35e136979f97ca.html +++ b/dir_49e56c817e5e54854c35e136979f97ca.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_510ea882f93f24ffb670d111f3c48591.html b/dir_510ea882f93f24ffb670d111f3c48591.html index fa7933da1c4..a5f304df13e 100644 --- a/dir_510ea882f93f24ffb670d111f3c48591.html +++ b/dir_510ea882f93f24ffb670d111f3c48591.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/src Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_52df7a7aca2af22ef5ab0d24eb6803a9.html b/dir_52df7a7aca2af22ef5ab0d24eb6803a9.html index 7e71cd7e2fa..2ed786fad84 100644 --- a/dir_52df7a7aca2af22ef5ab0d24eb6803a9.html +++ b/dir_52df7a7aca2af22ef5ab0d24eb6803a9.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_5dc317956fa60ac77cdbadd82354438e.html b/dir_5dc317956fa60ac77cdbadd82354438e.html index 0a315553433..2697c8de6b6 100644 --- a/dir_5dc317956fa60ac77cdbadd82354438e.html +++ b/dir_5dc317956fa60ac77cdbadd82354438e.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/interface Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_67357b0f7d17e3dc186f37df5b958e70.html b/dir_67357b0f7d17e3dc186f37df5b958e70.html index 1cfb5e84dfa..7d800c8c79a 100644 --- a/dir_67357b0f7d17e3dc186f37df5b958e70.html +++ b/dir_67357b0f7d17e3dc186f37df5b958e70.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/interface Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_a11d860a120a6ee231a0ac3c6fec920f.html b/dir_a11d860a120a6ee231a0ac3c6fec920f.html index fe94a189f5b..ba27c2a57d9 100644 --- a/dir_a11d860a120a6ee231a0ac3c6fec920f.html +++ b/dir_a11d860a120a6ee231a0ac3c6fec920f.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombinePdfs/src Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_b40e54ab5ece44508715b2777a1a95eb.html b/dir_b40e54ab5ece44508715b2777a1a95eb.html index 31058974bd8..20a591279e1 100644 --- a/dir_b40e54ab5ece44508715b2777a1a95eb.html +++ b/dir_b40e54ab5ece44508715b2777a1a95eb.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/bin Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_bd86b6048931602d3e119f261829765b.html b/dir_bd86b6048931602d3e119f261829765b.html index e8f42b96653..3ec249c96cc 100644 --- a/dir_bd86b6048931602d3e119f261829765b.html +++ b/dir_bd86b6048931602d3e119f261829765b.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/python Directory Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/dir_bd86b6048931602d3e119f261829765b.js b/dir_bd86b6048931602d3e119f261829765b.js index c17c46b8067..faf633e277d 100644 --- a/dir_bd86b6048931602d3e119f261829765b.js +++ b/dir_bd86b6048931602d3e119f261829765b.js @@ -1,4 +1,4 @@ var dir_bd86b6048931602d3e119f261829765b = [ - [ "plotting.py", "plotting_8py.html", "plotting_8py" ] + [ "plotting.py", "plotting_8py.html", null ] ]; \ No newline at end of file diff --git a/doxygen.css b/doxygen.css index ac617e22609..12012230f94 100644 --- a/doxygen.css +++ b/doxygen.css @@ -1,4 +1,4 @@ -/* The standard CSS for doxygen 1.8.16 */ +/* The standard CSS for doxygen 1.9.1 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; @@ -66,6 +66,11 @@ p.startli, p.startdd { margin-top: 2px; } +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + p.starttd { margin-top: 0px; } @@ -98,30 +103,96 @@ caption { } span.legend { - font-size: 70%; - text-align: center; + font-size: 70%; + text-align: center; } h3.version { - font-size: 90%; - text-align: center; + font-size: 90%; + text-align: center; } -div.qindex, div.navtab{ - background-color: #E3F0F8; - border: 1px solid #7EB9E1; - text-align: center; +div.navtab { + border-right: 1px solid #7EB9E1; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; } -div.qindex, div.navpath { +div.qindex{ + text-align: center; width: 100%; line-height: 140%; + font-size: 130%; + color: #A0A0A0; } -div.navtab { - margin-right: 15px; +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F5F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } } + /* @group Link Styling */ a { @@ -138,17 +209,6 @@ a:hover { text-decoration: underline; } -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #74B4DF; - color: #FFFFFF; - border: 1px double #57A4D8; -} - .contents a.qindexHL:visited { color: #FFFFFF; } @@ -535,7 +595,7 @@ table.memberdecls { white-space: nowrap; } -.memItemRight { +.memItemRight, .memTemplItemRight { width: 100%; } @@ -1353,10 +1413,12 @@ dl.citelist dt { font-weight:bold; margin-right:10px; padding:5px; + text-align:right; + width:52px; } dl.citelist dd { - margin:2px 0; + margin:2px 0 2px 72px; padding:5px 0; } @@ -1419,6 +1481,12 @@ div.toc li.level4 { margin-left: 45px; } +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + .PageDocRTL-title div.toc li.level1 { margin-left: 0 !important; margin-right: 0; @@ -1656,47 +1724,6 @@ tr.heading h2 { /* @group Markdown */ -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #143D59; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #143D59; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #1A4F73; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - table.markdownTable { border-collapse:collapse; margin-top: 4px; diff --git a/doxygen.png b/doxygen.png deleted file mode 100644 index c3a3ec258c168c3189a6cbd58d95bb9b6e940798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3841 zcmV+c5B~6pP)GLqk+XE-$6``(5^4YwcYd?>z6BW8SCr{65cG>-+oOKflYr)ym7u z0iX&1@CKqf08{}0-b_@pY1b0~UIz*Q@{tJuRRDnBj*`nK0Kg(@0>En^y0OB~UoNn$1=EN_<};7x286NJp0x|{BZFmC#a?0#9QZ&t{`1oij!~aJPd#| ziqGt2z22mA*5EU`@xXC>*NM-=>*rw8x(fhl80_rHuGo@qnpe_%Ce6DU@>GrP;r7WWOJ>D3^o;V zdRlyk^%A+hq3%kdUz~@2%UTVQmPjNC_q&{+Alq(3g7>WqMUy&KqR^*XBVbGdO3R)D zKn1Y8WjEJww%xdBHoDr^1|SW=et0XK^~rD;_vyk&O142>c2*eKWCr?TWn)fPI(8`LFkGXO_o&^bBn5Pb8fol9H?0 zwCgDxYs_%UW*xe|ZQ5V}s0?jg`ti$}Fv_M?mo57?#F`Wb0OsHZ3>`lW4{x0F;eU#` z<>1a#6T1QP({OXgvc=>x*xYBIPgbJfkZy772@8Yw2lW@_`*QDNl9$JsE2n>OrM&c? zCw;9@J4?h5UU3-L*Uz3xpI!UUS?8ZTMrsNGSb}ox1ze1s7(#xd$gdxfldvl`#3Uz< zedobb$m8*|?C>qb2aZW6TQ%7#?A+A)qst|N0KgKA^$MuN1CQ@)DW?$^nrnf_aI zQG7NNwp|sF&++5bOIX=VkUsRQZHlqor3Cj=fJoi9!uK5YUop6ywAwcRSb#77Haaus z#P>?_5#Dsf^x%vzFO#@R-)UI1XpxECM9L*=kzXQxhVf$hF@sML>FMb?36Jv5JJDQ@ z`CRuQDm=Y^$EkM9cXCdqtpXs8nD1{PEq$BtJ!yg$BPGz+D?n%_`MgGcqWc6V`+uowYvMz$f8fe}1gS@GBYemvk8E@k zm!+zvx!Q|5s&zTIlJIeey>eQ_o=}PK*sOf4p5eueoo*ZOWkkBKbo6b>zKh6@NArcw zN0_tuywN9L-sD$j$*)1=@NT$H6Y8lNTx(}D8sHVu8`EEoC@^{6nNhh7=TT=W>3*y&cP}_>`ww;s^kussPIPbmwCtO(- zzzuHDYvx*Qf@~3`61i#Fw*g4Qvs)8*3HOksvp7H{EPzJ+y!3mPNCX+@=onMdeUr6h z!%k;;{qD2kaQBB)fgnXA*Z1{17D~qdICl@rr+BhsrIDbl?+yZxhU?<@?>(&Z2{m_ko7UjQjZM;=`H0Z z5Y(`*r+(`K$vBOS(*H@E}o=9$Hh8xpc!^V#4QqAX~~Rje4A029dP zRxDY=@YqTT}1Rx)o=Z}A{DIF*s zbHM|fo7mI5pl6hEUGjPBW*vmP!ziBX*IJicMExOZ&3l5{d@eiX&uk`S{34QszxF91x2X6a_!&PZBJ`Xu z-MvSp@Kw1NlZ|lckgm41-_nRUpY9cMH8j$t%Tg8ZIlWb(M@$g^=PX>e z!=ZznwW#pPmQ%RCe)bvue(TR8os;HE&iNVbF_d5Slt_NUnhj_uy9<10gyGkVS;FyE zucNDW-7?d=#mn0V&mP?4#_=-QOqaJ}q%64|l)U`^-os}I_-H)a_-xy?Z@Vmqi1t%g zYZrO60ss>%Idl_Qi~N#EUpQAtS3z~?&FkP;2hLtYm$ohNQLn}Tq+#d*6O>N7EoakL zri*yZi95(h{2Y&OUgAC#v5fkmXguU2Ona|CR_)I*+Mh9x&2iVx^cD#+?}281EDDeB z5DALwJ!`E-JD?c=X=L5t%|jP*t9k%n0~?SkRb%DeaI8KS5`{Ak^p z(aw;_o4flua##8%rtaJuNIs%ljgRzS;?=_>X8fFw;WB9{M7jVFeik3L~*WEr@y>T zdCrBjV}%{mNoumuULdIF2>q(C=@sfR5;S4)7KPk)Qg{psPktj3)YaPF@mS>2~uN~xioNthNL^0_J$D2&o zk76c#G4HcV>*W08H5lTBke?{BZOPZ1%ZxRe83UREz$;<27YOR%p^pib2-06D!sa<+ zMS{jgZdNEeH4x{ge?bJD+9eXiPk7T2(}T6%L-CgEOxIs5f<7(`E8}7SNaI7#;Q~Qx z({}T>pH-a(37!3;5ZKS8C*l+RLq2{=)Z$r5Q2-yoq@O=CYK;j2VQD9jw`pD?`3xkV zL3P{rj*N*k-5t~C%*TVDkGYbLaQu><{{6piQYbr0#c`}3mwl8(I>Pa0mUlSC4z?fp z3I5!(t)G1$5@cS3b^#r6W&{Z&S-;&jxRKj9;pfROxhOcK<6|Y4 z69XV0iG;w!)Lp`lzn6!QJlSh(dw8H`ofq4+w4@Nlr*`4-FISS-hV;)G^n(mO9n5@& zl8$hMkxq1FacN%IK{W3`@p7VLVgX3w(}l4pI=x#-dYn4|X^@S^5R>l=g+a_@D>P9l z&b?d6c2K;I>sON>@t8FDU_17sqD3Uu$`8dg`s3J1WP8m*Ej*t{1Z^jRMj7Ue`3QB= zT%b8Y{BZIr!#6uONe+O?NJ!BGkVb&FlI=N=twB`G$&j9qC;Gt)D+Ka6pvRf0BMlE#@=H}oOM%26rI|QqBGwLav~Xx27CayA7Qs@#_^7~Ctq9x z08{|^bf%ZM^hvkEq5uF(81K>;04zcvsAlbYI{N+q0RBLjR`&S8Os@r-TJ>yRM-;|q zTtJ>K1l4Q(iC3f>L2aBXd-8BabI;jRrjP7n1pqID%n$DrzHr9?!0(7n#o7DS;$>s! zrbeAME&%Yx6zZJpiGp!-n#vNsVW zS5DV1FE0n9Mzv}HP$^Q+-o>q*D^RV5)m($9;oI($U~TUR0RMKBTs_T4tMDxn1OR^& z)Us=d^58Jhj;lTwsED8#e-x4AkuB1c`Xlk1CPtVL%$x^ccqN$$z= zlx)Y+whjNQrhMmJEBtSqzFC62^T$zmd9|asZeN@rbM2q3<8+ zha}X4hE09p!hd=6SU-`KLGsRp!$R(&PWhn>g@pF{{jAKc((w6--u&`CWO`i z@E<}h5tLc8 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js index c8e84aaa6f6..88f2c27e6d9 100644 --- a/dynsections.js +++ b/dynsections.js @@ -1,25 +1,26 @@ /* - @licstart The following is the entire license notice for the - JavaScript code in this file. + @licstart The following is the entire license notice for the JavaScript code in this file. - Copyright (C) 1997-2017 by Dimitri van Heesch + The MIT License (MIT) - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + Copyright (C) 1997-2020 by Dimitri van Heesch - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. - @licend The above is the entire license notice - for the JavaScript code in this file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file */ function toggleVisibility(linkObj) { diff --git a/files.html b/files.html index 6050ca3cd41..5d4469ef74f 100644 --- a/files.html +++ b/files.html @@ -4,7 +4,7 @@ - + CombineHarvester: File List @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -179,7 +176,7 @@  TFileIO.cc  Utilities.cc  ValidationTools.cc - docs + docs
diff --git a/functions.html b/functions.html index 028d887ba86..8f900ad8612 100644 --- a/functions.html +++ b/functions.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -127,6 +124,9 @@

- a -

  • AddSystFromProc() : ch::CombineHarvester
  • +
  • AddSystVar() +: ch::CombineHarvester +
  • AddWorkspace() : ch::CombineHarvester
  • @@ -152,7 +152,7 @@

    - a -

      : ch::CombineHarvester
    • attribute() -: ch::Object +: ch::Object
    • AutoRebin() : ch::AutoRebin diff --git a/functions_b.html b/functions_b.html index 64e91846031..62c42af03ba 100644 --- a/functions_b.html +++ b/functions_b.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
      - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
      @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_c.html b/functions_c.html index d76ec01bd1e..43d5f1e5353 100644 --- a/functions_c.html +++ b/functions_c.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_d.html b/functions_d.html index 8f888a28f1a..85883ce5fcc 100644 --- a/functions_d.html +++ b/functions_d.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_e.html b/functions_e.html index ac18a65e302..1b2d2443855 100644 --- a/functions_e.html +++ b/functions_e.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_f.html b/functions_f.html index 6ecb147c703..6c505328791 100644 --- a/functions_f.html +++ b/functions_f.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func.html b/functions_func.html index ddc0931a7d4..3ad224ece86 100644 --- a/functions_func.html +++ b/functions_func.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -127,6 +124,9 @@

- a -

  • AddSystFromProc() : ch::CombineHarvester
  • +
  • AddSystVar() +: ch::CombineHarvester +
  • AddWorkspace() : ch::CombineHarvester
  • @@ -152,7 +152,7 @@

    - a -

      : ch::CombineHarvester
    • attribute() -: ch::Object +: ch::Object
    • AutoRebin() : ch::AutoRebin diff --git a/functions_func_b.html b/functions_func_b.html index 54b95e5e167..6247de6349d 100644 --- a/functions_func_b.html +++ b/functions_func_b.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
      - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
      @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_c.html b/functions_func_c.html index e1a7caa4b2f..4038dd4dcf7 100644 --- a/functions_func_c.html +++ b/functions_func_c.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -136,7 +133,7 @@

- c -

    : ch::CMSHistFuncFactory
  • CombineHarvester() -: ch::CombineHarvester +: ch::CombineHarvester
  • Contains() : ch::syst::SystMap< T > diff --git a/functions_func_d.html b/functions_func_d.html index 88358e0149c..76461a338f1 100644 --- a/functions_func_d.html +++ b/functions_func_d.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_e.html b/functions_func_e.html index 9f5b0bbc9fd..8d564cb5605 100644 --- a/functions_func_e.html +++ b/functions_func_e.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_f.html b/functions_func_f.html index 702a54432c5..0add77ce641 100644 --- a/functions_func_f.html +++ b/functions_func_f.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_g.html b/functions_func_g.html index a80690bd0dd..b399da85738 100644 --- a/functions_func_g.html +++ b/functions_func_g.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -172,7 +169,7 @@

- g -

    : ch::CombineHarvester
  • GetShapeWithUncertainty() -: ch::CombineHarvester +: ch::CombineHarvester
  • GetTuple() : ch::syst::SystMap< T > @@ -185,7 +182,7 @@

    - g -

      , ch::syst::SystMapFunc< T >
    • GetUncertainty() -: ch::CombineHarvester +: ch::CombineHarvester
    • GetVerbosity() : ch::BinByBinFactory diff --git a/functions_func_h.html b/functions_func_h.html index 5ab6f74cbdc..e67541a51b5 100644 --- a/functions_func_h.html +++ b/functions_func_h.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
      - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
      @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_i.html b/functions_func_i.html index c270ad2c036..51cefe738ab 100644 --- a/functions_func_i.html +++ b/functions_func_i.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_m.html b/functions_func_m.html index 2dba0d646d1..6eda1566987 100644 --- a/functions_func_m.html +++ b/functions_func_m.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_n.html b/functions_func_n.html index 5682cf87005..f8c8d22ac5e 100644 --- a/functions_func_n.html +++ b/functions_func_n.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_o.html b/functions_func_o.html index 82c24669fbe..fe379ceac74 100644 --- a/functions_func_o.html +++ b/functions_func_o.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_p.html b/functions_func_p.html index 11aae2342fe..414583ab53f 100644 --- a/functions_func_p.html +++ b/functions_func_p.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -105,6 +102,9 @@  

- p -

    +
  • param_str_ext() +: ch::Systematic +
  • Parameter() : ch::Parameter
  • diff --git a/functions_func_r.html b/functions_func_r.html index 9e9b84fdc1f..f726d04ae85 100644 --- a/functions_func_r.html +++ b/functions_func_r.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -137,7 +134,7 @@

- r -

diff --git a/functions_func_s.html b/functions_func_s.html index 82912ccc17d..cf1c818cd85 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
@@ -159,6 +156,9 @@

- s -

  • set_observable() : ch::Process
  • +
  • set_param_str_ext() +: ch::Systematic +
  • set_pdf() : ch::Process , ch::Systematic @@ -187,7 +187,7 @@

    - s -

      , ch::Process
    • set_shapes() -: ch::Systematic +: ch::Systematic
    • set_signal() : ch::Object @@ -327,7 +327,7 @@

      - s -

        : ch::CombineHarvester
      • Systematic() -: ch::Systematic +: ch::Systematic
      • SystWorkspaceName() : ch::HistMapping diff --git a/functions_func_t.html b/functions_func_t.html index 1a1408b2039..91163994861 100644 --- a/functions_func_t.html +++ b/functions_func_t.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
        - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
        @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_u.html b/functions_func_u.html index efa969c5798..6a4ffcff133 100644 --- a/functions_func_u.html +++ b/functions_func_u.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_v.html b/functions_func_v.html index 365bae9888e..83cb1016394 100644 --- a/functions_func_v.html +++ b/functions_func_v.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_w.html b/functions_func_w.html index acdbeddf464..f57ff0234da 100644 --- a/functions_func_w.html +++ b/functions_func_w.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_z.html b/functions_func_z.html index ccde4d9b7fd..03f6b3965fa 100644 --- a/functions_func_z.html +++ b/functions_func_z.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_func_~.html b/functions_func_~.html index 20b8e63eb94..9a4b4b82117 100644 --- a/functions_func_~.html +++ b/functions_func_~.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_g.html b/functions_g.html index 44777a78991..222046eaa41 100644 --- a/functions_g.html +++ b/functions_g.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -172,7 +169,7 @@

- g -

    : ch::CombineHarvester
  • GetShapeWithUncertainty() -: ch::CombineHarvester +: ch::CombineHarvester
  • GetTuple() : ch::syst::SystMap< T > @@ -185,7 +182,7 @@

    - g -

      , ch::syst::SystMapFunc< T >
    • GetUncertainty() -: ch::CombineHarvester +: ch::CombineHarvester
    • GetVerbosity() : ch::BinByBinFactory diff --git a/functions_h.html b/functions_h.html index df759a9e720..4d31761f47e 100644 --- a/functions_h.html +++ b/functions_h.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
      - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
      @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_i.html b/functions_i.html index 64622e55b83..c237aefec1a 100644 --- a/functions_i.html +++ b/functions_i.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_l.html b/functions_l.html index 571babd2f01..84d5bc99235 100644 --- a/functions_l.html +++ b/functions_l.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_m.html b/functions_m.html index 454d017d220..99b0602eb6a 100644 --- a/functions_m.html +++ b/functions_m.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_n.html b/functions_n.html index 476a557943f..5380adf358d 100644 --- a/functions_n.html +++ b/functions_n.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_o.html b/functions_o.html index 12b7a56012d..eff2b4e88a6 100644 --- a/functions_o.html +++ b/functions_o.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -106,7 +103,7 @@

- o -

  • Object() -: ch::Object +: ch::Object
  • observable() : ch::Process diff --git a/functions_p.html b/functions_p.html index 60d1fdcb80a..e768cb23f3e 100644 --- a/functions_p.html +++ b/functions_p.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -105,6 +102,9 @@
Here is a list of all struct and union fields with links to the structures/unions they belong to:

- p -

    +
  • param_str_ext() +: ch::Systematic +
  • Parameter() : ch::Parameter
  • diff --git a/functions_r.html b/functions_r.html index 5956ffb965c..ddfdc0398fd 100644 --- a/functions_r.html +++ b/functions_r.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -137,7 +134,7 @@

- r -

diff --git a/functions_rela.html b/functions_rela.html index ddc9da457eb..92e05b86a2a 100644 --- a/functions_rela.html +++ b/functions_rela.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Related Functions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
diff --git a/functions_s.html b/functions_s.html index f5a8508a359..bdf4188b408 100644 --- a/functions_s.html +++ b/functions_s.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -162,6 +159,9 @@

- s -

- + @@ -83,7 +80,7 @@
diff --git a/functions_type.html b/functions_type.html index 9277e393b11..060f3c0b835 100644 --- a/functions_type.html +++ b/functions_type.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Typedefs @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_u.html b/functions_u.html index e14399e97da..5351ffa4ca4 100644 --- a/functions_u.html +++ b/functions_u.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_v.html b/functions_v.html index 5d461419019..e6f8209e1d2 100644 --- a/functions_v.html +++ b/functions_v.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_vars.html b/functions_vars.html index e5153aa4e72..33409ee9cd7 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields - Variables @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_w.html b/functions_w.html index e3bb90f2f65..2b1826d78ec 100644 --- a/functions_w.html +++ b/functions_w.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -115,7 +112,7 @@

- w -

    : ch::CardWriter
  • WriteDatacard() -: ch::CombineHarvester +: ch::CombineHarvester
  • ws : ch::HistMapping diff --git a/functions_x.html b/functions_x.html index 82c1557574e..79c64ba1c5c 100644 --- a/functions_x.html +++ b/functions_x.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_z.html b/functions_z.html index 0fc6910fe6c..ecaafd8b0b3 100644 --- a/functions_z.html +++ b/functions_z.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/functions_~.html b/functions_~.html index bc4e84a9dbc..85ab8327d3e 100644 --- a/functions_~.html +++ b/functions_~.html @@ -4,7 +4,7 @@ - + CombineHarvester: Data Fields @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/globals.html b/globals.html index 5c7747c7730..c31fe0b386e 100644 --- a/globals.html +++ b/globals.html @@ -4,7 +4,7 @@ - + CombineHarvester: Globals @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -119,10 +116,10 @@

- c -

    : Plotting_Contours.h
  • CreateAxisHist() -: Plotting.h +: Plotting.h
  • CreateAxisHists() -: Plotting.h +: Plotting.h
  • CreateTransparentColor() : Plotting.h @@ -176,7 +173,7 @@

    - g -

    diff --git a/globals_defs.html b/globals_defs.html index 3fa40d1de81..3a041ef8029 100644 --- a/globals_defs.html +++ b/globals_defs.html @@ -4,7 +4,7 @@ - + CombineHarvester: Globals @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/globals_func.html b/globals_func.html index 4b6fff82527..72267b8cc99 100644 --- a/globals_func.html +++ b/globals_func.html @@ -4,7 +4,7 @@ - + CombineHarvester: Globals @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/hierarchy.html b/hierarchy.html index a913fe79a75..b4bcdb33ac1 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -4,7 +4,7 @@ - + CombineHarvester: Class Hierarchy @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
diff --git a/index.html b/index.html index a3e653c91b1..6bbacfc9f9b 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - + CombineHarvester: Introduction @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
- @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
@@ -64,10 +61,10 @@
- + @@ -83,7 +80,7 @@
@@ -112,7 +109,8 @@
  • Other comments
  • -

    This page documents the CombineHarvester framework for the production and analysis of datacards for use with the CMS combine tool. The central part of this framework is the CombineHarvester class, which provides a representation of the text-format datacards and the associated shape input.

    +

    +

    This page documents the CombineHarvester framework for the production and analysis of datacards for use with the CMS combine tool. The central part of this framework is the CombineHarvester class, which provides a representation of the text-format datacards and the associated shape input.

    The production of new datacards typically requires several steps, for example:

    • Defining analysis categories, signal and background processes
    • @@ -137,16 +135,15 @@

    • CombineHarvester/CombineTools, which contains the CombineHarvester class and other parts of the core framework
    • CombineHarvester/CombinePdfs, which provides tools for building custom RooFit pdfs
    -

    The CMSSW version that should be used with CombineHarvester is driven by the recommendation for the HiggsAnalysis/CombinedLimit package, which is also required. The latest instructions can be found here. The CombineHarvester framework is compatible with the CMSSW 10_2_X and 11_3_X series releases. A new release area can be set up and compiled in the following steps:

    export SCRAM_ARCH=slc7_amd64_gcc900
    -scram project CMSSW CMSSW_11_3_4
    -cd CMSSW_11_3_4/src
    +

    The CMSSW version that should be used with CombineHarvester is driven by the recommendation for the HiggsAnalysis/CombinedLimit package, which is also required. The latest instructions can be found here. The CombineHarvester framework is compatible with the CMSSW 14_1_X and 11_3_X series releases. A new release area can be set up and compiled in the following steps:

    cmsrel CMSSW_14_1_0_pre4
    +cd CMSSW_14_1_0_pre4/src
     cmsenv
     git clone https://github.com/cms-analysis/HiggsAnalysis-CombinedLimit.git HiggsAnalysis/CombinedLimit
     # IMPORTANT: Checkout the recommended tag on the link above
     git clone https://github.com/cms-analysis/CombineHarvester.git CombineHarvester
    -git checkout v2.0.0
    +git checkout v3.0.0-pre1
     scram b
    -

    If you are using this framework for the first time we recommend taking a look through some of the examples below which demonstrate the main features:

    +

    If you are using this framework for the first time we recommend taking a look through some of the examples below which demonstrate the main features:

    • Examples Part 1: How CombineHarvester builds a datacard representation, parsing existing datacards, evaluating contents
    • Examples Part 2: Creating a new datacard, defining processes and systematics, writing text datacards
    • @@ -180,7 +177,7 @@

      CombineHarvester/CombineTools/src/TFileIO.cc:21 Problem: TH1 eleTau_0jet_medium/ggH not found in CMSSW_7_1_5/src/auxiliaries/shapes/htt_et.inputs-sm-7TeV-hcg.root ******************************************************************************* -

      If the cause of such an error message is unclear, or if you believe the error message should not have been produced, please raise an issue here with full details on reproducing the problem: https://github.com/cms-analysis/CombineHarvester/issues/new

      +

      If the cause of such an error message is unclear, or if you believe the error message should not have been produced, please raise an issue here with full details on reproducing the problem: https://github.com/cms-analysis/CombineHarvester/issues/new

      Please also raise an issue if you encounter any bugs, unintended behaviour, abrupt errors or segmentation faults - these will be addressed promptly by the developers.

    diff --git a/intro1.html b/intro1.html index 4fe7bd1a800..d2e24596e22 100644 --- a/intro1.html +++ b/intro1.html @@ -4,7 +4,7 @@ - + CombineHarvester: Examples Part I @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -113,11 +110,12 @@
  • Yields, copying and sets
  • -

    File: CombineTools/bin/Example1.cpp

    +

    +

    File: CombineTools/bin/Example1.cpp

    In this example we use CombineHarvester to parse an existing datacard and then extract information from it. Open the file above and take a look at the source code. To run the example, first make sure the code has been compiled with scram:

    cd $CMSSW_BASE/src
     scram b -j4
     Example1
    -

    +

    Parsing a single card

    In the first part we locate and open a single text datacard file:

    // Use the CMSSW_BASE environment variable to get the full path to the auxiliaries folder
    @@ -132,26 +130,31 @@
    // Print the Observation, Process and Systematic entries to the screen
    + +
    CombineHarvester & PrintObs()
    +
    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 & PrintProcs()
    +
    CombineHarvester & PrintSysts()

    When parsing a datacard, CombineHarvester breaks down the information it contains into sets of objects, each represented by a C++ class. A ch::Observation object stores the information about the observed data in a single category, and likewise ch::Process stores the information for one expected signal or background process in a category. A ch::Systematic object records the uncertainty value assigned to a particular process from a particular source.

    Note
    Internally a CombineHarvester contains three vectors, one for each kind of object. It's the job of the ParseDatacard method to build a new set of these objects, extract the mapped histograms, and append them to these vectors. The histogram extraction is done automatically using the mapping rules given in the datacard (the lines starting with shape). Once the mapped ROOT file has been located and opened, the relevant histograms are copied into their corresponding CombineHarvester objects.

    Each object class stores a standard set of metadata, designed to aid in the filtering and selection of particular objects within a CombineHarvester, and which in the example above is specified explicitly. The possible metadata is listed in the following table.

    - + - + - + - + - + - + - + - +
    name type example value
    name type example value
    bin string automatic
    bin string automatic
    process string automatic
    process string automatic
    analysis string "htt"
    analysis string "htt"
    era string "8TeV"
    era string "8TeV"
    channel string "mt"
    channel string "mt"
    bin_id int 6
    bin_id int 6
    mass string "125"
    mass string "125"

    Of these only bin, process and mass are tracked and used by combine, the others are optional and can be left empty if unneeded. The bin property is used to uniquely label an event category. Along with the process names, this is written directly into the datacard and is extracted automatically. The mass property is an exception: although we typically create a datacard for a particular signal mass hypothesis this information is not recorded in the datacard, but rather is passed to combine as a command line option, e.g. combine -M Asymptotic -m 125 my_datacard.txt.

    Warning
    If mass is not specified, ParseDatacard is likely to fail as this property is often needed to map signal processes to histograms in the input ROOT file. You can tell if this property is needed by looking for the term $MASS in the shapes rules at the top of the text datacard.
    @@ -212,12 +215,17 @@

    cmb2.FilterAll([](ch::Object const* obj) {
    return obj->bin_id() <= 4;
    });
    +
    CombineHarvester & FilterAll(Function func)
    + +
    virtual int bin_id() const
    Definition: Object.h:35

    Alternatively,there are a number of fixed-property filters, in which you need only supply a vector of the object properties you want to keep:

    // Another way to achieve the same effect
    cmb2.bin_id({5, 6, 7});
    // Filter out all objects that have process name "QCD"
    cmb2.process({"QCD"}, false);
    +
    CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
    +
    CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)

    An optional boolean can be supplied as a second argument. When set to false this reverses the logic - objects with a property in the list will be dropped. In the second line we use this to remove all information about the QCD process. The full list of filter methods is found here

    Yields, copying and sets

    @@ -235,34 +243,25 @@

    // It is also possible to generate sets of object properties. Here we print
    // out the expected yield for each process in each bin
    for (auto bin : cmb2.bin_set()) {
    -
    for (auto proc : cmb2.cp().bin({bin}).process_set()) {
    +
    for (auto proc : cmb2.cp().bin({bin}).process_set()) {
    cout << bin << "," << proc << ": "
    << cmb2.cp().bin({bin}).process({proc}).GetRate()
    << "\n";
    }
    }
    + +
    std::set< std::string > process_set()
    +
    CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
    +
    std::set< std::string > bin_set()
    +
    CombineHarvester cp()
    Creates and returns a shallow copy of the CombineHarvester instance.

    Note that these functions are greedy - they will sum the contribution from every available Observation or Process entry. This means in the first line we get the total number of observed events in the three remaining categories. To get the yield for a single category we can prefix the function with a filter method. But here we must be careful, because we don't want to actually remove the information on the other categories permanently, which is what would happen if we just do:

    cmb2.bin({"muTau_vbf_loose"}).GetObservedRate();
     // cmb2 only contains objects for the "muTau_vbf_loose" category now!
    -

    To get around this we first call the cp method on our CombineHarvester instance. This makes a shallow copy of the instance - in this it is only pointers to the contained objects, not the objects themselves, which are copied into a new instance. Such a copy is computationally fast to make, and we are free to filter objects from it without affecting the original instance at all.

    +

    To get around this we first call the cp method on our CombineHarvester instance. This makes a shallow copy of the instance - in this it is only pointers to the contained objects, not the objects themselves, which are copied into a new instance. Such a copy is computationally fast to make, and we are free to filter objects from it without affecting the original instance at all.

    Note
    Although filtering the objects in a shallow copy has no effect on the object lists in the original instance, both instances do still point to the same objects, so modifying the actual contents via the shallow copy will affect both instances. To create a full CombineHarvester copy, in which the underlying objects are also duplicated, use the deep copy method instead.

    The last part of the example code uses the CombineHarvester set-generating methods to conveniently loop through all defined (bin, process) combinations and print out the expected yield. The full list of available set-generating methods can be found here.

    - -
    CombineHarvester & PrintProcs()
    -
    CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
    -
    std::set< std::string > bin_set()
    -
    CombineHarvester cp()
    Creates and returns a shallow copy of the CombineHarvester instance.
    -
    CombineHarvester & PrintObs()
    -
    CombineHarvester & FilterAll(Function func)
    -
    virtual int bin_id() const
    Definition: Object.h:35
    -
    CombineHarvester & PrintSysts()
    - -
    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 & bin(std::vector< std::string > const &vec, bool cond=true)
    - -
    CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
    diff --git a/intro2.html b/intro2.html index bd4d9724e01..c705e3a865c 100644 --- a/intro2.html +++ b/intro2.html @@ -4,7 +4,7 @@ - + CombineHarvester: Examples Part II @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -114,11 +111,12 @@
  • Writing datacards
  • -

    File: CombineTools/bin/Example2.cpp

    +

    +

    File: CombineTools/bin/Example2.cpp

    In this example we will set up a simplified version of the Higgs to tau tau datacards, while exploring the main features of datacard creation with the CombineHarvester tool. To run the example, first make sure the code has been compiled:

    cd $CMSSW_BASE/src
     scram b -j4
     Example2
    -

    +

    Defining categories and processes

    We start by defining two analysis categories (or 'bins'). It's a good idea for each bin to have a unique name: this is required by combine, and while not required by CombineHarvester explicitly, a number of functions rely on this being true. CombineHarvester also allows for each object to be assigned an integer value, called a "bin_id", that does not need to be unique. This can be useful to label a "type-of-category" that might appear more than once. For example, VBF event categories for both the 7TeV and 8TeV datasets might have a common bin_id, but different names: "vbf_7TeV" and "vbf_8TeV".

    // First define the location of the "auxiliaries" directory where we can
    @@ -138,20 +136,25 @@
    {2, "muTau_vbf_loose"}
    };
    // ch::Categories is just a typedef of vector<pair<int, string>>
    + +
    std::vector< std::pair< int, std::string > > Categories

    Now we define the signal mass points we will build datacards for, but note these are specified as strings, not floats. The function ch::MassesFromRange is used to quickly generate mass values from 120 to 135 GeV in 5 GeV steps.

    vector<string> masses = ch::MassesFromRange("120-135:5");
    // Or equivalently, specify the mass points explicitly:
    // vector<string> masses = {"120", "125", "130", "135"};
    +
    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.
    Definition: Utilities.cc:249

    The next step is to add some new objects to the CombineHarvester instance. First we will specifiy the observations (i.e. the actual data). The AddObservations method takes a series of vectors as arguments. Each vector specifies some property, such as the analysis name, the dataset era or the bin information. Every possible combination of elements from these vectors will be used to add a new Observation entry.

    The arguments are: AddObservations(masses, analyses, eras, channels, categories)

    Below we specify one mass entry ("*"), which implies we only need one entry that will cover all signal mass hypotheses. Then we specify the higgs-tau-tau analysis ("htt"), the 8TeV dataset ("8TeV"), the mu+tau analysis channel ("mt") and the categories we defined above. If the analysis, era and channel properties aren't relevant for your analysis, you can always leave them as a single emtpy string.

    cb.AddObservations({"*"}, {"htt"}, {"8TeV"}, {"mt"}, cats);
    +
    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)

    Next we add the signal and background processes. The arguments are similar to the AddObservations method. An extra argument is added after the channels for the list of processes, and a final boolean option specifies whether these are signal or background processes. Note that each process name here should correspond to the histogram name in your input file. In the signal case we pass the list of Higgs mass hypotheses generated above instead of the generic "*".

    vector<string> bkg_procs = {"ZTT", "W", "QCD", "TT"};
    cb.AddProcesses({"*"}, {"htt"}, {"8TeV"}, {"mt"}, bkg_procs, cats, false);
    vector<string> sig_procs = {"ggH", "qqH"};
    cb.AddProcesses(masses, {"htt"}, {"8TeV"}, {"mt"}, sig_procs, cats, true);
    +
    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)

    Creating systematics

    The next step is to add details of the systematic uncertainties. The details of an uncertainty on a single process in a single bin is called a ch::Systematic. With CombineHarvester we create the ch::Systematic entries for each uncertainty source in turn. In doing so we must specify: the name of the nuisance parameter we want to use, the type (i.e. normalisation or shape), which processes it should be applied to and the magnitude of the uncertainty on each process. All this information can be expressed in a single line of code (though for clarity we will usually split it over multiple lines), for example the luminosity uncertainty:

    @@ -159,13 +162,16 @@
    .AddSyst(cb, "lumi_$ERA", "lnN", SystMap<era>::init
    ({"7TeV"}, 1.022)
    ({"8TeV"}, 1.026));
    +
    CombineHarvester & signals()
    +
    void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
    +
    CombineHarvester cp()
    Creates and returns a shallow copy of the CombineHarvester instance.

    We can break this line down into several parts. cb.cp() returns a shallow copy of the CombineHarvester instance - i.e. the Observation and Process entries are shared with the original object (see the documentation of Example 1). However, removing entries from this shallow copy leaves the entries in the original instance intact. The next method, signals(), acts on this copy. This is one of several filter methods. It removes any non-signal process from the internal entries. We do this because we only want to create Systematic entries for the signal processes. Like all filter methods this returns a reference to itself. Then we can apply the actual AddSyst method. The first argument is a reference to the CombineHarvester instance where the new Systematic entries should be created. In this case we just give it our original instance (remember we are calling the AddSyst method on a copy of this instance). The next argument is the Systematic name. Before the Systematic entry for each Process is created a number of string substitutions will be made, based on the properties of the process in question. These are:

    $BIN       --> proc.bin()
     $PROCESS   --> proc.process()  (the process name)
     $MASS      --> proc.mass()
     $ERA       --> proc.era()
     $CHANNEL   --> proc.channel()
     $ANALYSIS  --> proc.analysis()
    -

    So in this example we will expect names like "lumi_8TeV". This substitution provides a quick way of renaming systematics to be correlated/uncorrelated between different channels/analyses/bins etc. Next we specifiy the nuisance type, which must be either "lnN" or "shape". The final argument is special map (SystMap) that contains the set of values that should be added. The SystMap is a templated class, which can take an arbitrary number of template parameters. Each parameter specifies a Process property that will be used as part of the key to map to the values. In this case we will just use the process era as a key. We initialse a new map with init, then provide a series of entries. Each entry should consist of a series of vectors, one for each key value, and end in the lnN value that should be assigned. Processes matching any combination of key properties in this map will be assigned the given value. In this map, we assign any Process with era "7TeV" a value of 1.022, and any "8TeV" Process a value of 1.026. More examples are given below:

    +

    So in this example we will expect names like "lumi_8TeV". This substitution provides a quick way of renaming systematics to be correlated/uncorrelated between different channels/analyses/bins etc. Next we specifiy the nuisance type, which must be either "lnN" or "shape". The final argument is special map (SystMap) that contains the set of values that should be added. The SystMap is a templated class, which can take an arbitrary number of template parameters. Each parameter specifies a Process property that will be used as part of the key to map to the values. In this case we will just use the process era as a key. We initialse a new map with init, then provide a series of entries. Each entry should consist of a series of vectors, one for each key value, and end in the lnN value that should be assigned. Processes matching any combination of key properties in this map will be assigned the given value. In this map, we assign any Process with era "7TeV" a value of 1.022, and any "8TeV" Process a value of 1.026. More examples are given below:

    cb.cp().process({"ggH"})
    .AddSyst(cb, "pdf_gg", "lnN", SystMap<>::init(1.097));
    @@ -183,6 +189,8 @@
    cb.cp().process(ch::JoinStr({sig_procs, {"ZTT"}}))
    .AddSyst(cb, "CMS_scale_t_mutau_$ERA", "shape", SystMap<>::init(1.00));
    +
    CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
    +
    std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
    Definition: Utilities.cc:153

    Creation of asymmetric "lnN" uncertainties is supported through the SystMapAsymm class, whose interface is very similar to SystMap. Instead of a single uncertainty value, simply provide the "down" and "up" relative uncertainties as two separate arguments.

    Extracting shape inputs

    @@ -190,7 +198,7 @@

    $PROCESS --> proc.process() $MASS --> proc.mass() $SYSTEMATIC --> syst.name() -

    Also note that data histogram must be named data_obs to be extracted by this command.

    +

    Also note that data histogram must be named data_obs to be extracted by this command.

    aux_shapes + "Imperial/htt_mt.inputs-sm-8TeV-hcg.root",
    "$BIN/$PROCESS",
    @@ -199,6 +207,8 @@

    aux_shapes + "Imperial/htt_mt.inputs-sm-8TeV-hcg.root",
    "$BIN/$PROCESS$MASS",
    "$BIN/$PROCESS$MASS_$SYSTEMATIC");
    +
    CombineHarvester & backgrounds()
    +
    void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)

    Adding bin-by-bin uncertainties

    The next step is optional. This will generate additional shape uncertainties to account for limited template statistics, so-called "bin-by-bin" uncertainties.

    @@ -212,6 +222,11 @@

    // the form: {analysis}_{channel}_{bin_id}_{era}
    // which is commonly used in the htt analyses
    +
    Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
    Definition: BinByBin.h:21
    +
    BinByBinFactory & SetAddThreshold(double val)
    Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
    Definition: BinByBin.h:99
    +
    BinByBinFactory & SetFixNorm(bool fix)
    Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
    Definition: BinByBin.h:124
    +
    void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
    Create bin-by-bin shape uncertainties for every process in src, and add these to dest
    Definition: BinByBin.cc:105
    +
    void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
    Definition: Utilities.cc:78

    We first create a ch::BinByBinFactory instance, and specify the bin error threshold over which an uncertainty should be created, expressed as a percentage of the bin content. We also set the flag "FixedNorm", which controls the normalisation of the Up and Down shapes that are created. If set to true, the normalisation is fixed to nominal rate. If false, the normalisation is allowed to vary. We then call the AddBinByBin method specifying that only the background processes should be considered.

    Writing datacards

    @@ -238,30 +253,13 @@

    b + "_" + m + ".txt", output);
    }
    }
    +
    CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
    +
    std::set< std::string > bin_set()

    While we are required to write a separate datacard for each mass point, there is no obligation to generate one for each bin. For example,

         cb.cp().mass({"125", "*"}).WriteDatacard("combined_125.txt", output);
    -

    will produce a datacard containing all categories.

    +

    will produce a datacard containing all categories.

    -
    std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
    Definition: Utilities.cc:153
    -
    BinByBinFactory & SetAddThreshold(double val)
    Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
    Definition: BinByBin.h:99
    -
    void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
    Create bin-by-bin shape uncertainties for every process in src, and add these to dest
    Definition: BinByBin.cc:105
    -
    void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
    -
    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.
    Definition: Utilities.cc:249
    -
    std::vector< std::pair< int, std::string > > Categories
    -
    CombineHarvester & backgrounds()
    -
    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)
    -
    std::set< std::string > bin_set()
    -
    void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
    -
    void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
    Definition: Utilities.cc:78
    -
    CombineHarvester & signals()
    -
    CombineHarvester cp()
    Creates and returns a shallow copy of the CombineHarvester instance.
    -
    CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
    - -
    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)
    -
    Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
    Definition: BinByBin.h:21
    -
    BinByBinFactory & SetFixNorm(bool fix)
    Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
    Definition: BinByBin.h:124
    -
    CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
    diff --git a/intro3.html b/intro3.html index dff7222833b..e65ca73417b 100644 --- a/intro3.html +++ b/intro3.html @@ -4,7 +4,7 @@ - + CombineHarvester: Examples Part III @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -106,11 +103,12 @@
    Examples Part III
    -

    File: CombineTools/bin/Example3.cpp

    +

    +

    File: CombineTools/bin/Example3.cpp

    This examples demonstrates how to create a simple four-bin counting experiment datacard. It is based on the example given on the combine twiki here. Special rateParam directives are added to the datacard to allow the normalisations in three of these four bins to float freely and the fourth will be expressed as a function of the these three parameters. Here we follow the C++ interface example, a similar python version can be found in CombineTools/scripts/Example3.py. Make sure all the code is compiled and run the example:

    cd $CMSSW_BASE/src
     scram b -j4
     Example3
    -

    We start by defining four categories: A, B, C and D in the normal way. Contrary to the previous shape-based examples, with a counting experiment we have to specify all of the observed and expected yields directly. To start with we'll define a map containing the observed yields in each category.

    +

    We start by defining four categories: A, B, C and D in the normal way. Contrary to the previous shape-based examples, with a counting experiment we have to specify all of the observed and expected yields directly. To start with we'll define a map containing the observed yields in each category.

    // Define four categories labelled A, B, C and D, and
    // set the observed yields in a map.
    ch::Categories cats = {
    @@ -125,6 +123,7 @@
    {"C", 100.},
    {"D", 500.}
    };
    +
    std::vector< std::pair< int, std::string > > Categories

    Next we create the CombineHarvester instance and populate it with Observation and Process entries. Then using the ForEachProc and ForEachObs methods we supply small lambda functions that set the observed and expected yields, for the former using our map defined above. For the latter we will set each yield to one and then create some rateParam entries that will allow these yields to float.

    cb.SetVerbosity(3);
    @@ -138,6 +137,17 @@
    x->set_rate(1);
    });
    + +
    void SetVerbosity(unsigned verbosity)
    +
    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 ForEachProc(Function func)
    +
    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)
    +
    void ForEachObs(Function func)
    +
    virtual std::string const & bin() const
    Definition: Object.h:17
    + +
    void set_rate(double const &rate)
    Definition: Observation.h:20
    + +
    void set_rate(double const &rate)
    Definition: Process.h:24

    First we add a regular lnN systematic uncertainty with the AddSyst method. Then, using the same technique, we add a rateParam systematic to each of the bins B, C and D. The name we give will be turned into a floating parameter which will be multiplied by the process yield that we set above to determine the overall process normalisation in the model. The name we specify here supports pattern substitution like any other systematic. In this case we have created a unique parameter per bin. In the SystMap we set the initial value of each parameter to the observed yield in the respective bin.

    Then we create the second type of rateParam term, one which is a function of the other parameters we have specified. This sets the expected yield in bin A as a function of the three free parameters we just created, like in a standard ABCD method to set a background normalisation via control regions. As for the floating parameters this expression will be multiplied by the nominal process yield. To define the expression we use different mapping object, a SystMapFunc, which accepts two string arguments instead of a float. The first is a RooFit formula in terms of generic parameters, e.g. @0, and the second is a comma-separated list of the corresponding parameter names.

    @@ -158,33 +168,21 @@
    cb.cp().bin({"A"}).AddSyst(cb, "scale_$BIN", "rateParam", SystMapFunc<>::init
    ("(@0*@1/@2)", "scale_B,scale_C,scale_D")
    );
    +
    CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
    +
    CombineHarvester cp()
    Creates and returns a shallow copy of the CombineHarvester instance.
    + + +
    Warning
    When calling AddSyst a check is made to see if the named parameter already exists. If so, and if it is a floating parameter, its initial value will be updated. If it is a formula, then the existing formula will be used to create the Systematic and the new value will be ignored, i.e. once a formula has been entered into the CombineHarvester instance it cannot be modified.

    Finally we print the CombineHarvester contents. Note that the while the Systematic entries for the rateParam terms are shown in the list the "value" column currently always shows zero. For floating terms the actual values are given in the final list of parameters. We end by writing the text datacard, where the initial parameter values and formulae will be written at the end.

    cb.PrintAll();
    cb.WriteDatacard("example3.txt");
    +
    void WriteDatacard(std::string const &name, std::string const &root_file)
    +
    CombineHarvester & PrintAll()
    Warning
    None of the CombineHarvester methods that evaluate process rates or shapes currently evaluate the effect of the rateParam terms. This will be implemented in a later release.
    -
    void ForEachProc(Function func)
    - -
    void ForEachObs(Function func)
    -
    void set_rate(double const &rate)
    Definition: Observation.h:20
    -
    virtual std::string const & bin() const
    Definition: Object.h:17
    -
    void SetVerbosity(unsigned verbosity)
    -
    std::vector< std::pair< int, std::string > > Categories
    - - -
    void set_rate(double const &rate)
    Definition: Process.h:24
    -
    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)
    - -
    CombineHarvester cp()
    Creates and returns a shallow copy of the CombineHarvester instance.
    -
    CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
    - -
    CombineHarvester & PrintAll()
    -
    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)
    -
    void WriteDatacard(std::string const &name, std::string const &root_file)
    - diff --git a/intro_morph.html b/intro_morph.html index 06d5b7ac213..bdebe924e88 100644 --- a/intro_morph.html +++ b/intro_morph.html @@ -4,7 +4,7 @@ - + CombineHarvester: RooMorphingPdf @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -106,7 +103,8 @@
    RooMorphingPdf
    -

    +

    +

    BuildRooMorphing function

    File: CombinePdfs/src/MorphFunctions.cc

    The PDF which is used for the signal is a custom RooFit PDF. Its application is made via the datacard production code, with a call to a function named BuildRooMorphing. Here we highlight some of the important features of this function. For a greater level of detail we recommend the reader look at the code itself, which is well commented.

    @@ -115,6 +113,7 @@
    std::string const& bin, std::string const& process,
    RooAbsReal& mass_var, std::string norm_postfix,
    bool allow_morph, bool verbose, bool force_template_limit, TFile * file) {
    +
    std::string 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]

    The options to this function are as follows:

    • A RooWorkspace to be passed to the function.
    • @@ -137,7 +136,7 @@
      // float-convertible, as an exception will be thrown by lexical_cast if not.
      std::sort(m_str_vec.begin(), m_str_vec.end(),
      [](string const& s1, string const& s2) {
      -
      return lexical_cast<double>(s1) < lexical_cast<double>(s2);
      +
      return lexical_cast<double>(s1) < lexical_cast<double>(s2);
      });
      // Convert the sorted vector of mass strings to an actual vector of doubles
      @@ -148,6 +147,8 @@
      }
      // So, we have m mass points to consider
      unsigned m = m_vec.size();
      +
      virtual std::string const & mass() const
      Definition: Object.h:38
      +
      std::vector< T > Set2Vec(std::set< T > const &in)
      Definition: Utilities.h:101

    Then it is necessary to track all the information on the systematics affecting the signal process. This is done separately for the shape and normalisation systematics. After some manipulation of this information (including special treatment for the case where a shape systematic also alters the normalisation, i.e. has a value different from 1.00), it is possible to build a RooArgList of the parameters controlling the vertical template morphing which is internally used by combine to apply the effect of the shape systematics to the signal.

    // We need to build a RooArgList of the vertical morphing parameters for the
    // vertical-interpolation pdf - this will be the same for each mass point so
    @@ -196,6 +197,7 @@
    }
    }
    }
    +
    #define FNERROR(x)
    Definition: Logging.h:9

    Note that the above code takes care over the possibility that the shape systematics are not the same for all masspoints - this is not currently supported in this function. The created "ss_list" is used later to create the vertical template morphing PDFs.

    For the normalisation systematics we must consider separately the two cases: 1) in the first case the uncertainty is the same for each masspoint, so we can leave this in the datacard in the usual way, but in case 2) where the uncertainty is not the same for each masspoint, we have to include this information in the signal PDF by creating a RooFit object that makes the uncertainty a function off mass. Finally a list is built of all objects required for the interpolation.

    A 1D spline is built directly from the array of rates and masses:

    @@ -293,10 +295,6 @@

    -
    #define FNERROR(x)
    Definition: Logging.h:9
    -
    virtual std::string const & mass() const
    Definition: Object.h:38
    -
    std::string 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]
    -
    std::vector< T > Set2Vec(std::set< T > const &in)
    Definition: Utilities.h:101
    diff --git a/introrun1_h_t_t.html b/introrun1_h_t_t.html index a15a5d235db..d04b990455b 100644 --- a/introrun1_h_t_t.html +++ b/introrun1_h_t_t.html @@ -4,7 +4,7 @@ - + CombineHarvester: Reproducing Run 1 H->tautau results @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -106,7 +103,8 @@
    Reproducing Run 1 H->tautau results
    -

    Using all of the techniques described previously, both in terms of datacard production and usage of the RooMorphingPdf object for signal processes, code to reproduce many of the Run 1 H->tautau results is included in the package. For some analyses, development was first performed for the datacard production without morphing applied, and fully validated, before moving to using morphing for the signal process. Note that in the non-morphing version many of the analyses have an equivalent python version. Once the usage of RooMorphingPdf for signal was validated in several use cases some additional analyses were added making use of this method only. This section describes how to find the code for each of the legacy analyses and details any specifics beyond the previous examples. More detail on the validation which was made can be found in the analysis note AN-15-235. Note that to run all of the examples below, the shape files exist in /auxiliaries and are linked to the script correctly. For more information on running the statistical results with the produced datacards, see later sections.

    +

    +

    Using all of the techniques described previously, both in terms of datacard production and usage of the RooMorphingPdf object for signal processes, code to reproduce many of the Run 1 H->tautau results is included in the package. For some analyses, development was first performed for the datacard production without morphing applied, and fully validated, before moving to using morphing for the signal process. Note that in the non-morphing version many of the analyses have an equivalent python version. Once the usage of RooMorphingPdf for signal was validated in several use cases some additional analyses were added making use of this method only. This section describes how to find the code for each of the legacy analyses and details any specifics beyond the previous examples. More detail on the validation which was made can be found in the analysis note AN-15-235. Note that to run all of the examples below, the shape files exist in /auxiliaries and are linked to the script correctly. For more information on running the statistical results with the produced datacards, see later sections.

    Systematics for legacy H->tautau results

    Files CombineTools/interface/HttSystematics.h, CombineTools/python/systematics

    @@ -134,6 +132,11 @@

    });
    }
    }
    +
    virtual std::string const & mass() const
    Definition: Object.h:38
    + +
    void set_rate(double const &rate)
    Definition: Process.h:24
    +
    double rate() const
    Definition: Process.h:25
    +
    TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
    Definition: Utilities.cc:121

    This reads the values for cross section times branching ratio from a text file and then uses them to scale each of the signal processes by the appropriate value.

    2) Merging bin by bin uncertainties

    @@ -142,6 +145,10 @@

    .SetFixNorm(true);
    +
    Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
    Definition: BinByBin.h:21
    +
    BinByBinFactory & SetAddThreshold(double val)
    Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
    Definition: BinByBin.h:99
    +
    BinByBinFactory & SetFixNorm(bool fix)
    Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
    Definition: BinByBin.h:124
    +
    BinByBinFactory & SetMergeThreshold(double val)
    The threshold for the merging algorithm.
    Definition: BinByBin.h:107

    In this example the merge threshold is set to 0.5. This controls the proportion of the total error that is allowed to be merged. The add threshold controls the value below which the stat uncertainty should be for the bin by bin uncertainty to be added. The uncertainties for different processes can then be added and merged simultaneously using calls like:

    bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({6}).process({"ZL", "ZJ", "W"}), cb);

    The filters for eta, bin id and channel can be used in this way to add the specific requirements for each channel and category, of which there were many for the legacy SM analysis.

    @@ -159,6 +166,7 @@

    auto post_drop = cb.syst_name_set();
    cout << ">> Systematics dropped: " << pre_drop.size() - post_drop.size()
    << "\n";
    +
    std::vector< std::string > ParseFileLines(std::string const &file_name)
    Definition: Utilities.cc:224

    The validation of the produced SM cards as compared to the official cards can be found in the Analysis Note.

    Run 1 H->hh->bbtautau and A->Zh->lltautau results

    @@ -184,16 +192,6 @@

    -
    double rate() const
    Definition: Process.h:25
    -
    BinByBinFactory & SetMergeThreshold(double val)
    The threshold for the merging algorithm.
    Definition: BinByBin.h:107
    -
    TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
    Definition: Utilities.cc:121
    -
    BinByBinFactory & SetAddThreshold(double val)
    Set the fractional bin error threshold for bin-by-bin creation and for participation in the merging a...
    Definition: BinByBin.h:99
    - -
    void set_rate(double const &rate)
    Definition: Process.h:24
    -
    virtual std::string const & mass() const
    Definition: Object.h:38
    -
    std::vector< std::string > ParseFileLines(std::string const &file_name)
    Definition: Utilities.cc:224
    -
    Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
    Definition: BinByBin.h:21
    -
    BinByBinFactory & SetFixNorm(bool fix)
    Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
    Definition: BinByBin.h:124
    diff --git a/limits.html b/limits.html index 74fdb0141cf..8302b4cd2e6 100644 --- a/limits.html +++ b/limits.html @@ -4,7 +4,7 @@ - + CombineHarvester: Limits @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -122,7 +119,8 @@
    -

    In these examples we will work through several different limit calculations using datacards from the Run 1 HTT analyses.

    +

    +

    In these examples we will work through several different limit calculations using datacards from the Run 1 HTT analyses.

    Limits in models with one POI

    First we will compute limits vs mH in the legacy SM Higgs analysis (HIG-13-004). This task will be broken down into several steps:

    @@ -137,18 +135,18 @@

    Creating the datacards

    Go to the CombineTools directory and create the datacards using the SMLegacyExample.py script:

    cd $CMSSW_BASE/src/CombineHarvester/CombineTools
     python scripts/SMLegacyExample.py
    -

    This will create a familiar structure of datacards in output/sm_cards, with one subdirectory containing the datacards for all channels and categories (cmb) and subdirectories containing just the cards for specific channels (e.g. tt). Within each of these directories the cards are organised into further subdirectories corresponding to the mass of the signal.

    +

    This will create a familiar structure of datacards in output/sm_cards, with one subdirectory containing the datacards for all channels and categories (cmb) and subdirectories containing just the cards for specific channels (e.g. tt). Within each of these directories the cards are organised into further subdirectories corresponding to the mass of the signal.

    Building the workspaces

    We will focus on computing the limits for each channel separately, but before we get to this we need to turn the datacards into binary RooFit workspaces. This means combining the cards from each category into a single text datacard with combineCards.py, then running text2workspace.py to convert this single card into a workspace.

    Note
    It is possible to run combine directly with a text datacard as input. Internally combine will just run text2workspace.py on it first with some default options and save the resulting workspace in a temporary location. For anything other than very simple models it is preferable to create the workspaces manually which can then be reused for later calculations.

    The combineTool.py script has a mode called T2W that passes options through to text2workspace.py and supports multiple datacard or directory options. With a directory argument, all the cards within that directory are combined first. If the enclosing directory is a number then this will automatically be used as the -m [mass] option in text2workspace.py, so there is no need to specify this explicitly. We can also take advantage of the --parallel option to build multiple workspaces simultaneously.

    cd output/sm_cards
     combineTool.py -M T2W -i {ee,mm,em,et,mt,tt}/* -o workspace.root --parallel 4
    -

    Here we have specified the name of the output workspace explicitly with the -o option. The T2W mode also has a --cc option that can be used to specify the name of the combined text datacard that is created (default is combined.txt). When individual datacards are given as input, this option causes the cards to be combined first and produces a single workspace, as opposed to the default behaviour which would create a workspace per datacard. Run combineTool.py -M T2W -h for more information.

    +

    Here we have specified the name of the output workspace explicitly with the -o option. The T2W mode also has a --cc option that can be used to specify the name of the combined text datacard that is created (default is combined.txt). When individual datacards are given as input, this option causes the cards to be combined first and produces a single workspace, as opposed to the default behaviour which would create a workspace per datacard. Run combineTool.py -M T2W -h for more information.

    Calculating limits

    We now have a set of workspaces within a {channel}/{mass}/workspace.root directory structure. The next step is simply to run the Asymptotic mode of combine on each workspace, which again can be done with combineTool.py. The normal -d/--datacard option is enhanced to support multiple workspaces:

    combineTool.py -M Asymptotic -d */*/workspace.root --there -n .limit --parallel 4
    -

    One minor complication is that combine produces its output in the directory we run it from. In this case the outputs for a mass point in the different channels will overwrite each other as there is nothing in the name option (-n) to distinguish them. The solution is to add the --there option which will run each combine command in the directory where the workspace is located.

    +

    One minor complication is that combine produces its output in the directory we run it from. In this case the outputs for a mass point in the different channels will overwrite each other as there is nothing in the name option (-n) to distinguish them. The solution is to add the --there option which will run each combine command in the directory where the workspace is located.

    Collect the output

    Each output file contains a "limits" TTree with one entry for each of the observed and expected limits, for example:

    *********************************************************************************
    @@ -163,7 +161,7 @@ 

    *********************************************************************************

    This could be used as a direct input for plotting but here we will use another combineTool.py method, CollectLimits to covert the information in these files to a more easily readable json file. This is a useful intermediate format for producing different figures and tables as it is simple to parse as a dictionary object in python.

    We can use the directory structure to collect all the outputs in one go, creating one json file per channel:

    combineTool.py -M CollectLimits */*/*.limit.* --use-dirs -o limits.json
    -

    By default the CollectLimits method will assume all the limit results should be merged into a single json file, but with the --use-dirs option it will group the output files according the parent directory name (skipping directories that correspond to mass values). The output files will have these directory names appended, e.g. limits_mt.json. The files are structured like a dictionary with one entry per mass value, e.g.

    +

    By default the CollectLimits method will assume all the limit results should be merged into a single json file, but with the --use-dirs option it will group the output files according the parent directory name (skipping directories that correspond to mass values). The output files will have these directory names appended, e.g. limits_mt.json. The files are structured like a dictionary with one entry per mass value, e.g.

    {
    "110.0": {
    "exp+1": 1.4916164875030518,
    @@ -193,26 +191,26 @@

    ROOT.gROOT.SetBatch(ROOT.kTRUE)
    # Style and pads
    - +
    canv = ROOT.TCanvas('limit', 'limit')
    -
    pads = OnePad()
    +
    pads = OnePad()
    # Get limit TGraphs as a dictionary
    -
    graphs = StandardLimitsFromJSONFile('limits_mt.json')
    +
    graphs = StandardLimitsFromJSONFile('limits_mt.json')
    # Create an empty TH1 from the first TGraph to serve as the pad axis and frame
    -
    axis = CreateAxisHist(graphs.values()[0])
    +
    axis = CreateAxisHist(graphs.values()[0])
    axis.GetXaxis().SetTitle('m_{H} (GeV)')
    axis.GetYaxis().SetTitle('95% CL limit on #mu')
    pads[0].cd()
    axis.Draw('axis')
    # Create a legend in the top left
    -
    legend = PositionedLegend(0.3, 0.2, 3, 0.015)
    +
    legend = PositionedLegend(0.3, 0.2, 3, 0.015)
    # Set the standard green and yellow colors and draw
    - -
    DrawLimitBand(pads[0], graphs, legend=legend)
    +
    StyleLimitBand(graphs)
    +
    DrawLimitBand(pads[0], graphs, legend=legend)
    legend.Draw()
    # Re-draw the frame and tick marks
    @@ -221,19 +219,23 @@

    # Adjust the y-axis range such that the maximum graph value sits 25% below
    # the top of the frame. Fix the minimum to zero.
    -
    FixBothRanges(pads[0], 0, 0, GetPadYMax(pads[0]), 0.25)
    +
    FixBothRanges(pads[0], 0, 0, GetPadYMax(pads[0]), 0.25)
    # Standard CMS logo
    -
    DrawCMSLogo(pads[0], 'CMS', 'Internal', 11, 0.045, 0.035, 1.2, '', 0.8)
    +
    DrawCMSLogo(pads[0], 'CMS', 'Internal', 11, 0.045, 0.035, 1.2, '', 0.8)
    canv.Print('.pdf')
    canv.Print('.png')
    +
    TLegend * PositionedLegend(double width, double height, int pos, double offset)
    Create a legend with fixed height, width and positioning.
    Definition: Plotting.h:669
    +
    double GetPadYMax(TPad *pad, double x_min, double x_max)
    Find the maximum value of all drawn objects in a given x-axis range.
    Definition: Plotting.h:844
    +
    std::vector< TPad * > OnePad()
    Just creates a single pad filling the entire canvas.
    Definition: Plotting.h:459
    +
    void DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX, float relPosX, float relPosY, float relExtraDY)
    Draw the CMS logo and subtitle in the new style.
    Definition: Plotting.h:744
    +
    TH1 * CreateAxisHist(TH1 *src, double xmin=0, double xmax=-1)
    Create an empty TH1 from another TH1 for drawing the axes.
    Definition: Plotting.h:485
    +
    void ModTDRStyle(int width, int height, double t, double b, double l, double r)
    Sets an improved plotting style, using the CMS default as a base.

    This will produce a standard limit plot:

    -
    - -
    -

    A more fully-featured example can be found in CombineTools/scripts/plotLimits.py. This script support multiple json file arguments for drawing combined observed/expected bands as above, or specifying single limits to draw. For the former it is enough to just give the json file as the argument. It is possible to restrict the output to just the observed or expected limits with the --show obs or --show exp option. With the latter it's possible to overlay limits from different json files:

    plotLimits.py limits_{ee,em,et,mm,mt,tt}.json:obs --auto-style
    -

    The limit to draw from each file is specified as [file.json]:[limit]. The --auto-style option will draw each TGraph with a different colour. Each TGraph can be styled further by extending the input argument: [file.json]:[limit]:[style options]. The last part is a comma-separated list of style settings that will be applied to the TGraph. All single-argument SetXYZ(...) methods are supported, e.g. 'limits_mt.json:exp:Title="#mu#tau_{h}",LineStyle=4 is equivalent to doing:

    +

    +

    A more fully-featured example can be found in CombineTools/scripts/plotLimits.py. This script support multiple json file arguments for drawing combined observed/expected bands as above, or specifying single limits to draw. For the former it is enough to just give the json file as the argument. It is possible to restrict the output to just the observed or expected limits with the --show obs or --show exp option. With the latter it's possible to overlay limits from different json files:

    plotLimits.py limits_{ee,em,et,mm,mt,tt}.json:obs --auto-style
    +

    The limit to draw from each file is specified as [file.json]:[limit]. The --auto-style option will draw each TGraph with a different colour. Each TGraph can be styled further by extending the input argument: [file.json]:[limit]:[style options]. The last part is a comma-separated list of style settings that will be applied to the TGraph. All single-argument SetXYZ(...) methods are supported, e.g. 'limits_mt.json:exp:Title="#mu#tau_{h}",LineStyle=4 is equivalent to doing:

    graph.SetTitle("#mu#tau_{h}")
    graph.SetLineStyle(4)

    The following command will draw the observed and expected limits for three of the channels:

    plotLimits.py --auto-style obs,exp \
    @@ -243,23 +245,19 @@ 

    'limits_et.json:exp0:Title="e#tau_{h} Expected"' \ 'limits_tt.json:obs:Title="#tau_{h}#tau_{h} Observed"' \ 'limits_tt.json:exp0:Title="#tau_{h}#tau_{h} Expected"' -

    Note the use of single quotes to prevent bash removing the double quotes surrounding the graph titles. Here the --auto-style argument is given a list of groups for assigning style options. Graphs in each group are given a common line style and the same pool of colours are assigned in order for graphs within that group. The output of this command is given below.

    -
    - -
    -

    +

    Note the use of single quotes to prevent bash removing the double quotes surrounding the graph titles. Here the --auto-style argument is given a list of groups for assigning style options. Graphs in each group are given a common line style and the same pool of colours are assigned in order for graphs within that group. The output of this command is given below.

    +

    +

    Workflow with RooMorphingPdf datacards

    For datacards using RooMorphingPdfs for the signal, the steps to produce limits are similar to the per-mass case above, with the main difference being the need to specify the set of mass values explicitly rather than picking this up from the directory structure. The SMLegacyMorphing program will create similar directory structure with the RooMorphingPdf version of the HIG-13-004 cards:

    cd $CMSSW_BASE/src/CombineHarvester/CombineTools
     SMLegacyMorphing
    -

    This program creates a directory per channel which already contain a combined datacard. We can specify these cards directly in the text2workspace step.

    cd output/sm_cards_morphed/
    +

    This program creates a directory per channel which already contain a combined datacard. We can specify these cards directly in the text2workspace step.

    cd output/sm_cards_morphed/
     combineTool.py -M T2W -i {ee,mm,em,et,mt,tt}/combinedCard.txt -o workspace.root --parallel 4
    -

    For the Asymptotic calculation we take advantage of the enhanced -m option to compute the limit in 2 GeV steps:

    combineTool.py -M Asymptotic -d */workspace.root -m 110:144:2 --freezeNuisances MH --there -n .limit --parallel 4
    -

    After this, the output collection and the plotting is the same as above:

    combineTool.py -M CollectLimits */*.limit.* --use-dirs -o limits.json
    +

    For the Asymptotic calculation we take advantage of the enhanced -m option to compute the limit in 2 GeV steps:

    combineTool.py -M Asymptotic -d */workspace.root -m 110:144:2 --freezeNuisances MH --there -n .limit --parallel 4
    +

    After this, the output collection and the plotting is the same as above:

    combineTool.py -M CollectLimits */*.limit.* --use-dirs -o limits.json
     plotLimits.py limits_mt.json
    -
    - -
    -

    +

    +

    Limit as a function of some other variable

    coming soon

    @@ -268,24 +266,14 @@

    Expected limits: pre-fit vs post-fit

    With the Asymptotic method of combine it is only possible to determine a limit for a single POI at a time. This POI will be chosen as the first one in the list of POIs embedded within the workspace. Therefore it is best to always specify the POI list explicitly, putting the one you want the limit for first in the list, e.g.

    combine -M Asymptotic -d workspace.root -m 125 --redefineSignalPOIs r_ggH,r_qqH
     

    to set a limit on r_ggH. You should also decide how to treat the other POIs in the fits for the limit extraction. By default combine will allow all other POIs to float freely, so in this example r_qqH will be profiled. If instead you wish to fix it to a particular value then it should not be included in the list of POIs, e.g.

    combine -M Asymptotic -d workspace.root -m 125 --redefineSignalPOIs r_ggH --setPhysicsModelParameters r_qqH=0.0 --freezeNuisances r_qqH
    -

    There is a further issue to consider when computing expected limits without a fit to the data (combine option --run blind or when generating toy datasets with -t). For the profiled case combine must generate a background-only pre-fit asimov dataset for use in the asymptotic calculation. In doing this only the first POI in the list will be fixed to zero. So if the other POI values are non-zero then the asimov dataset will contain a (probably) unwanted signal contribution. To avoid this it is safest to explicitly set the values of the other POIs to zero, e.g.

    combine -M Asymptotic -d workspace.root -m 125 --redefineSignalPOIs r_ggH,r_qqH --setPhysicsModelParameters r_qqH=0.0
    -

    +

    There is a further issue to consider when computing expected limits without a fit to the data (combine option --run blind or when generating toy datasets with -t). For the profiled case combine must generate a background-only pre-fit asimov dataset for use in the asymptotic calculation. In doing this only the first POI in the list will be fixed to zero. So if the other POI values are non-zero then the asimov dataset will contain a (probably) unwanted signal contribution. To avoid this it is safest to explicitly set the values of the other POIs to zero, e.g.

    combine -M Asymptotic -d workspace.root -m 125 --redefineSignalPOIs r_ggH,r_qqH --setPhysicsModelParameters r_qqH=0.0
    +

    Signal injected limits

    coming soon

    -
    def StyleLimitBand(graph_dict, overwrite_style_dict=None)
    Definition: plotting.py:1586
    -
    def GetPadYMax(pad, do_min=False)
    Definition: plotting.py:1310
    -
    def FixBothRanges(pad, fix_y_lo, frac_lo, fix_y_hi, frac_hi)
    Adjusts y-axis range such that a lower and a higher value are located a fixed fraction of the frame h...
    Definition: plotting.py:1226
    -
    def DrawCMSLogo(pad, cmsText, extraText, iPosX, relPosX, relPosY, relExtraDY, extraText2='', cmsTextSize=0.8)
    Blah.
    Definition: plotting.py:1399
    -
    def StandardLimitsFromJSONFile(json_file, draw=['obs', 'exp0', 'exp1', 'exp2'])
    Definition: plotting.py:789
    -
    def CreateAxisHist(src, at_limits=True)
    Definition: plotting.py:460
    -
    def ModTDRStyle(width=600, height=600, t=0.06, b=0.12, l=0.16, r=0.04)
    Modified version of the tdrStyle.
    Definition: plotting.py:177
    -
    def PositionedLegend(width, height, pos, offset, horizontaloffset=None)
    Definition: plotting.py:1492
    - -
    def DrawLimitBand(pad, graph_dict, draw=['exp2', 'exp1', 'exp0', 'obs'], draw_legend=None, legend=None, legend_overwrite=None)
    Definition: plotting.py:1602
    diff --git a/m_a-tanb-_limits_8md.html b/m_a-tanb-_limits_8md.html index 5461e31735a..89f205d8010 100644 --- a/m_a-tanb-_limits_8md.html +++ b/m_a-tanb-_limits_8md.html @@ -4,7 +4,7 @@ - + CombineHarvester: docs/mA-tanb-Limits.md File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    diff --git a/md_docs__charged_higgs.html b/md_docs__charged_higgs.html index f36dab7b4b4..d9a85b6b044 100644 --- a/md_docs__charged_higgs.html +++ b/md_docs__charged_higgs.html @@ -4,7 +4,7 @@ - + CombineHarvester: Charged Higgs datacards with RooMorphingPdf @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - + @@ -83,7 +80,7 @@
    @@ -109,7 +106,7 @@

    Getting the cards

    The cards from the CMS HCG svn need to be copied into the auxiliaries directory:

    cp -r /afs/cern.ch/work/a/agilbert/public/CombineTools/data/HIG-14-020.r6636 $CMSSW_BASE/src/auxiliaries/datacards/
    -

    We will only be using the "low-mass" cards (m_H+ < m_top), which are named like combine_datacard_hplushadronic_m[MASS].txt, where [MASS] ranges from 80 to 160 GeV.

    +

    We will only be using the "low-mass" cards (m_H+ < m_top), which are named like combine_datacard_hplushadronic_m[MASS].txt, where [MASS] ranges from 80 to 160 GeV.

    Build a RooMorphingPdf version

    The program AdaptChargedHiggs will:

    @@ -122,40 +119,40 @@

    Reproduce limits in HIG-14-020

    To reproduce the model-independent limits from the charged Higgs PAS we will need to use the same physics model that scales the tt->H+H-bb and tt->H+W-bb processes by the appropriate function of the t->H+b branching ratio POI BR. This has been adapted from the original version in the combine repository to account for our change of signal process naming:

    text2workspace.py hplus_tauhad_mssm.txt -o hplus_tauhad_mssm.root -P CombineHarvester.CombinePdfs.MSSM:brChargedHiggs
    -

    Then we can run the asymptotic limits:

    combineTool.py -M Asymptotic -d hplus_tauhad_mssm.root -m 80:160:10  --freezeNuisances MH --setPhysicsModelParameterRanges BR=0,0.2 --cminDefaultMinimizerType Minuit2 --rAbsAcc 0.00001 -n .ChargedHiggs
    -

    A few non-default combine options are used:

    +

    Then we can run the asymptotic limits:

    combineTool.py -M Asymptotic -d hplus_tauhad_mssm.root -m 80:160:10  --freezeNuisances MH --setPhysicsModelParameterRanges BR=0,0.2 --cminDefaultMinimizerType Minuit2 --rAbsAcc 0.00001 -n .ChargedHiggs
    +

    A few non-default combine options are used:

    - + - + - + - +
    Option Reason
    Option Reason
    --setPhysicsModelParameterRanges BR=0,0.2 Don't want the range to be too large compared to the typical uncertainty on the limit (can reduce Minuit precision)
    --setPhysicsModelParameterRanges BR=0,0.2 Don't want the range to be too large compared to the typical uncertainty on the limit (can reduce Minuit precision)
    --cminDefaultMinimizerType Minuit2 When doing the fit to get the global observables for the asimov dataset combine uses Minuit not Minuit2 by default - better to always use Minuit2
    --cminDefaultMinimizerType Minuit2 When doing the fit to get the global observables for the asimov dataset combine uses Minuit not Minuit2 by default - better to always use Minuit2
    --rAbsAcc 0.00001 The default absolute uncertainty on the POI value when searching for the limit is too large compared to the small values of BR we are probing here - we would get inaccurate limits.
    --rAbsAcc 0.00001 The default absolute uncertainty on the POI value when searching for the limit is too large compared to the small values of BR we are probing here - we would get inaccurate limits.

    The output limits are found to be in excellent agreement with the published numbers (dash indicates only available via morphing):

    - + - + - + - + - + - + - + - + - + - +
    Mass (GeV) Median exp. (HIG-14-020) Median exp. (CH) Obs. (HIG-14-020) Obs. (CH)
    Mass (GeV) Median exp. (HIG-14-020) Median exp. (CH) Obs. (HIG-14-020) Obs. (CH)
    80 0.0111 0.0111 0.0121 0.0121
    80 0.0111 0.0111 0.0121 0.0121
    90 0.0080 0.0079 0.0094 0.0095
    90 0.0080 0.0079 0.0094 0.0095
    100 0.0061 0.0061 0.0063 0.0063
    100 0.0061 0.0061 0.0063 0.0063
    110 - 0.0046 - 0.0043
    110 - 0.0046 - 0.0043
    120 0.0034 0.0034 0.0029 0.0029
    120 0.0034 0.0034 0.0029 0.0029
    130 - 0.0028 - 0.0023
    130 - 0.0028 - 0.0023
    140 0.0023 0.0023 0.0018 0.0018
    140 0.0023 0.0023 0.0018 0.0018
    150 0.0021 0.0021 0.0015 0.0015
    150 0.0021 0.0021 0.0015 0.0015
    160 0.0022 0.0022 0.0016 0.0016
    160 0.0022 0.0022 0.0016 0.0016
    diff --git a/md_docs__hybrid_new_grid.html b/md_docs__hybrid_new_grid.html index 685ff18f8a4..feb61e73183 100644 --- a/md_docs__hybrid_new_grid.html +++ b/md_docs__hybrid_new_grid.html @@ -4,7 +4,7 @@ - + CombineHarvester: Calculating grids of CLs values using toys @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    diff --git a/namespacech.html b/namespacech.html index e0b6acc756e..4f1f42402df 100644 --- a/namespacech.html +++ b/namespacech.html @@ -4,7 +4,7 @@ - + CombineHarvester: ch Namespace Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - + @@ -83,7 +80,7 @@
    @@ -130,15 +127,13 @@ class  CardWriter  Automates the writing of datacards into directory structures. More...
      -class  CMSHistFuncFactory -  class  CombineHarvester   +struct  HistMapping +  class  FnTimer  Determine the total amount of time spent in a function. More...
      -struct  HistMapping -  class  Object   class  Observation @@ -151,6 +146,8 @@   class  Systematic   +class  CMSHistFuncFactory +  @@ -1722,7 +1719,7 @@

    void MyFunc() { LOGLINE(std::cout, "Some message"); } -

    produces

     [MyFunc] Some message
    +

    produces

     [MyFunc] Some message
     

    Definition at line 27 of file Logging.cc.

    @@ -1791,7 +1788,7 @@

    std::string ch::GetQualififedName(std::string const& str) -

    would be converted to

     ch::GetQualififedName
    +

    would be converted to

     ch::GetQualififedName
     

    Definition at line 8 of file Logging.cc.

    @@ -2591,7 +2588,7 @@

    m1-m2:r1,m3,m4,m5-m6:r2,... -

    where mi and ri must both be positive. A term like mi-mj:r (where mi must be < mj) genrates masses starting at mi and increasing by an interval r up to mj.

    +

    where mi and ri must both be positive. A term like mi-mj:r (where mi must be < mj) genrates masses starting at mi and increasing by an interval r up to mj.

    This function returns a vector of ordered mass values converted to strings.

    Note
    Use the function ch::ValsFromRange if you need to include negative numbers - this uses a different syntax for the ranges so doesn't suffer from the amiguity of the - sign
    Parameters
    @@ -2634,7 +2631,7 @@

    m1:m2|r1,m3,m4,m5:m6|r2,... -

    where mi and ri can be positive or negative. A term like mi-mj:r (where mi must be < mj) genrates values starting at mi and increasing by an interval r up to mj.

    +

    where mi and ri can be positive or negative. A term like mi-mj:r (where mi must be < mj) genrates values starting at mi and increasing by an interval r up to mj.

    This function returns a vector of ordered values converted to strings.

    Parameters

    Typedefs

    @@ -3232,7 +3229,7 @@

    -

    Definition at line 35 of file CombineHarvester.cc.

    +

    Definition at line 36 of file CombineHarvester.cc.

    diff --git a/namespacech.js b/namespacech.js index 6ce25490152..bf0bbf19249 100644 --- a/namespacech.js +++ b/namespacech.js @@ -5,14 +5,123 @@ 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" ], + [ "FnTimer", "classch_1_1_fn_timer.html", "classch_1_1_fn_timer" ], [ "Object", "classch_1_1_object.html", "classch_1_1_object" ], [ "Observation", "classch_1_1_observation.html", "classch_1_1_observation" ], [ "Parameter", "classch_1_1_parameter.html", "classch_1_1_parameter" ], [ "Process", "classch_1_1_process.html", "classch_1_1_process" ], [ "SOverBInfo", "structch_1_1_s_over_b_info.html", "structch_1_1_s_over_b_info" ], - [ "Systematic", "classch_1_1_systematic.html", "classch_1_1_systematic" ] + [ "Systematic", "classch_1_1_systematic.html", "classch_1_1_systematic" ], + [ "CMSHistFuncFactory", "classch_1_1_c_m_s_hist_func_factory.html", "classch_1_1_c_m_s_hist_func_factory" ], + [ "Categories", "namespacech.html#aa97b500b98aeaa86756eb1c5395a866e", null ], + [ "json", "namespacech.html#a9ce1f37a56b1499707629dc77b9f7853", null ], + [ "erase_if", "namespacech.html#a9e0d877cb39147fa1de5cdcb8eff2110", null ], + [ "any_of", "namespacech.html#a9ae81b01c3e51356f05c2734d4e7fd8d", null ], + [ "contains", "namespacech.html#a961ef6b98124198d1648868011bc0153", null ], + [ "contains", "namespacech.html#a7d0976239046f20281fb0bd2bd2c3625", null ], + [ "contains_rgx", "namespacech.html#a7778c42ab19640ea360293c20bfa24f5", null ], + [ "FilterContaining", "namespacech.html#a66828130e239590bca8112c89d68b653", null ], + [ "FilterContainingRgx", "namespacech.html#a281b148e8871f50f2c3269ab91b1a837", null ], + [ "FilterContaining", "namespacech.html#af86af10e2226a6deb97ad890c1ac9f0b", null ], + [ "FilterContainingRgx", "namespacech.html#ab0a522713ffa93da18cb26132f875344", null ], + [ "CloneObs", "namespacech.html#a30449f890154e9002086dbfacc74d85c", null ], + [ "CloneProcs", "namespacech.html#a25bd105268bf5e23e7c895329938aa0e", null ], + [ "CloneSysts", "namespacech.html#aa9eced43e8f467639564c24f2203f818", null ], + [ "CloneProcsAndSysts", "namespacech.html#a27eee114b589ec9869ea3d34863e41fe", null ], + [ "SplitSyst", "namespacech.html#a0f62630d67d75c1b6143c0519da2a720", null ], + [ "AddSystematics_et_mt", "namespacech.html#aac947603f4cc50f70e7a8765da3e13d1", null ], + [ "AddSystematics_em", "namespacech.html#afe8f3907b055d2d6c0bc8b2bb7f74a02", null ], + [ "AddSystematics_ee_mm", "namespacech.html#a4d79c4fca0a76cc62c91d580644c051c", null ], + [ "AddSystematics_tt", "namespacech.html#ac1578f3e0a1da427e6750ba4cefd94b8", null ], + [ "AddMSSMSystematics", "namespacech.html#aa94f943eeda46d951fd794b7532944ed", null ], + [ "AddMSSMSystematics", "namespacech.html#a597c0a29e463a96eb05f9df8cb9dfe90", null ], + [ "AddMSSMUpdateSystematics_et_mt", "namespacech.html#a0d7482a8b0989a1b6b7fe1689c65b0e1", null ], + [ "AddMSSMUpdateSystematics_et_mt", "namespacech.html#a2718097dd3af197ac2ad9d728b70ddde", null ], + [ "AddMSSMUpdateSystematics_em", "namespacech.html#ae6eebbd180b87701e7724c3db9d6cd5a", null ], + [ "AddMSSMUpdateSystematics_em", "namespacech.html#acec5cdd79f370c7bee88f4de418c9423", null ], + [ "AddMSSMUpdateSystematics_mm", "namespacech.html#a2306f36ca615557c6e40a542eeac706c", null ], + [ "AddMSSMUpdateSystematics_mm", "namespacech.html#af29ced9cc4bb7590f89223df727d1706", null ], + [ "AddMSSMUpdateSystematics_tt", "namespacech.html#acc4147799e297d63fa1a9ca08559a111", null ], + [ "AddMSSMUpdateSystematics_tt", "namespacech.html#aca0068af8fbaa611e502aa5647ed2121", null ], + [ "AddSystematics_hhh_et_mt", "namespacech.html#a5e05f5018289301287533bc288e576bb", null ], + [ "AddSystematics_hhh_et_mt", "namespacech.html#adab895bcbcec0006d4def02d2e909206", null ], + [ "AddSystematics_hhh_tt", "namespacech.html#ad7c22b70d392f9617ee6f1c27a622661", null ], + [ "AddSystematics_hhh_tt", "namespacech.html#add9281b32e8ff7ec2d8fd6de545b3b4f", null ], + [ "AddSystematics_AZh", "namespacech.html#a7f9b08fd76f4940d92768574abe5df73", null ], + [ "AddSystematics_AZh", "namespacech.html#a7bf80bed7d84e3c82934fa939dc6e1e3", null ], + [ "ExtractJsonFromFile", "namespacech.html#af6162c2c3534475d55453bbdb86b13a4", null ], + [ "ExtractJsonFromString", "namespacech.html#a39e16e4393f4f945edfa540c3751cae8", null ], + [ "UpdateJson", "namespacech.html#a53e0814284e64a6c0aa54c3a130c0a88", null ], + [ "MergedJson", "namespacech.html#aec2e836e1039ccd11ac13a201627c5c8", null ], + [ "MergedJson", "namespacech.html#a52e06fe8e122355225a7c485d88c22ff", null ], + [ "LogLine", "namespacech.html#a5903f0de2f0d18871f4dab7430d04830", null ], + [ "FnError", "namespacech.html#afdabce9fcf0e565dcd93d273e771ef68", null ], + [ "GetQualififedName", "namespacech.html#a082a87dbfd5b9d61198f7fd4b68e70f9", null ], + [ "make_unique", "namespacech.html#a1d79b15a838a8871759a19ab4efdf07f", null ], + [ "ParseCombineWorkspace", "namespacech.html#a5ae8a88e9e0d2120deec06e553a525f6", null ], + [ "ParseCombineWorkspacePy", "namespacech.html#af7bcceb32c2f4a82fe1de32a93d0dfa3", null ], + [ "FindAddPdf", "namespacech.html#a5a4aae941cd175bf6764ad6789b4df8c", null ], + [ "IntegrateFloatRange", "namespacech.html#a35c9af4e2f53f4686e4c4bbba535eb35", null ], + [ "GetClonedTH1", "namespacech.html#a9db822b84dd7cf9f1d3bc76a6a741498", null ], + [ "WriteToTFile", "namespacech.html#a06e7ae02d1abed286e7184a7e7626529", null ], + [ "OpenFromTFile", "namespacech.html#aa859d4d87eb7f27b2499e55c73789d98", null ], + [ "OpenFromTFile", "namespacech.html#af7fe148f865bc9674341c9aa36d875ef", null ], + [ "ParametersByName", "namespacech.html#aef408f71dec36c69cd2e145505212c49", null ], + [ "ExtractFitParameters", "namespacech.html#a49fb1eb0d277893e0f6a9cc099d4cf28", null ], + [ "ExtractSampledFitParameters", "namespacech.html#a9ba092c0c88fd0a122b927b83d91a4de", null ], + [ "SetStandardBinNames", "namespacech.html#a99d1b22dfcd46bfde6a31a7a5765cd2b", null ], + [ "SetStandardBinName", "namespacech.html#a1a29f03f52660fd3a9fce0c353e3eee5", null ], + [ "MatchingProcess", "namespacech.html#a9c09b4e5a6dbbd49dfebd9235a2f60b5", null ], + [ "SetProperties", "namespacech.html#a0ea5d53cb275e53807f576a4020cf15e", null ], + [ "SetFromBinName", "namespacech.html#af9aa1e238306d161656d15f0bf4fb8d4", null ], + [ "TGraphFromTable", "namespacech.html#a847fd9dc77ba21e35a6b531e1d26902a", null ], + [ "Join", "namespacech.html#a6c065d2d25d44e2ca91d56cf6f97964f", null ], + [ "JoinStr", "namespacech.html#abfd9e94a6fd4c33abe1bbd5fb03e7f28", null ], + [ "Set2Vec", "namespacech.html#a5e23234ab65cfa48c99b83d94e291125", null ], + [ "TH1F2Data", "namespacech.html#a1347e48be022e182e17dfc421bf12680", null ], + [ "RebinHist", "namespacech.html#a2cbcfd049543bfe9f63958bc671deeae", null ], + [ "RestoreBinning", "namespacech.html#a23cd9444931a49de080638458f722501", null ], + [ "GenerateCombinations", "namespacech.html#a98ec286981dda179332f736f113ab8a5", null ], + [ "ParseFileLines", "namespacech.html#a23a4079d5c68e21d9697570255e08224", null ], + [ "is_float", "namespacech.html#acde782eef7132d07c095b4468de17dff", null ], + [ "MassesFromRange", "namespacech.html#a9aa7fae276e9a3482b0e2e0b7adf779b", null ], + [ "ValsFromRange", "namespacech.html#aafb5cab1f237067be3553e893ca0a7b9", null ], + [ "HasNegativeBins", "namespacech.html#a7825c01633c16c8c5d7c46f78acf6d4c", null ], + [ "ZeroNegativeBins", "namespacech.html#ad95e5447b9cb0676428f86b1fd018a97", null ], + [ "Tuple2String", "namespacech.html#a8240c3e729fa2ebaaaf1082ce6a15dd5", null ], + [ "make_relative", "namespacech.html#a2f4db67e7b9039935a58ea60b650041a", null ], + [ "PrintSystematic", "namespacech.html#aaec3acecfcee89ac9d4dfe9d0c20827c", null ], + [ "ValidateShapeUncertaintyDirection", "namespacech.html#a2e81a1feb11ba3255909526f90bbe7da", null ], + [ "ValidateShapeUncertaintyDirection", "namespacech.html#aab5d6bfe23a9535399ea8ab48a3f223a", null ], + [ "CheckEmptyShapes", "namespacech.html#a8c2dcef8ee437178ff45671478c475c0", null ], + [ "CheckEmptyShapes", "namespacech.html#a7369fb27dd88881fe886abb67447cbc0", null ], + [ "CheckEmptyBins", "namespacech.html#a8a3f27453e5ff2a690defd0e9af30ba1", null ], + [ "CheckEmptyBins", "namespacech.html#a17c9ada5f6dff7d80556d45f6fc15711", null ], + [ "CheckNormEff", "namespacech.html#a36b4ff13e4987621615e47bd1c026993", null ], + [ "CheckNormEff", "namespacech.html#aca65f362f9126cb2b200fff5356a9d59", null ], + [ "CheckSizeOfShapeEffect", "namespacech.html#a86955210d56802afd6080eda66bd4fa6", null ], + [ "CheckSizeOfShapeEffect", "namespacech.html#a3ea8e5201690fc0aca17b034fa3ba527", null ], + [ "CheckSmallSignals", "namespacech.html#aa86c0751d41d0c533f51fe249468872a", null ], + [ "CheckSmallSignals", "namespacech.html#a2fac772d6886087f8f4f77a711369ec9", null ], + [ "ValidateShapeTemplates", "namespacech.html#a1734a00def15ba2ee51c28197176548e", null ], + [ "ValidateShapeTemplates", "namespacech.html#a110f24bc749763a04ea6c9fbd909fde8", null ], + [ "ValidateCards", "namespacech.html#a879dedf45db74da348f2571492a280d2", null ], + [ "swap", "namespacech.html#a98935d065d3339aebddc63328e2233ba", null ], + [ "operator<<", "namespacech.html#a40560251a7c7ee58a41bd890f1963175", null ], + [ "swap", "namespacech.html#acfd60821a2deee24955d3a98e6605fd0", null ], + [ "swap", "namespacech.html#a53918f33e1cc50065abd25be2b64539a", null ], + [ "operator<<", "namespacech.html#a2e35146227543a2245a91020259faaa8", null ], + [ "swap", "namespacech.html#a44b242b58441307bf5c7f0dbfbafe865", null ], + [ "operator<<", "namespacech.html#aad11ca6f4dfe946a28a052117116ee04", null ], + [ "swap", "namespacech.html#a8b80f6510601d33e773f90b1160d5463", null ], + [ "operator<<", "namespacech.html#a8a22853e782855a8d9c00d074a8749dc", null ], + [ "swap", "namespacech.html#a675f0b80d66b8a9b3948231c94a20fba", null ], + [ "operator<<", "namespacech.html#a5874d67ae782c76e78e6b9afcadbe784", null ], + [ "PrintProc", "namespacech.html#a433334f3da17eb2886510a97df0d2ef4", null ], + [ "AsTH1F", "namespacech.html#af9b462e52384bf17acf24c57bee7a5d3", null ], + [ "BuildRooMorphing", "namespacech.html#a011bcc8eb52bfa118fd44ade245e9e45", null ], + [ "GraphFromSpline", "namespacech.html#aefdcaba918224f404af9fcd9b53fa7bb", null ], + [ "MakeMorphDebugPlots", "namespacech.html#a21ce0ae95c56bde7e1ecc1f21a839d2d", null ] ]; \ No newline at end of file diff --git a/namespacech_1_1syst.html b/namespacech_1_1syst.html index 4fdf79dcc60..724a7560f70 100644 --- a/namespacech_1_1syst.html +++ b/namespacech_1_1syst.html @@ -4,7 +4,7 @@ - + CombineHarvester: ch::syst Namespace Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@

    @@ -64,10 +61,10 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -117,20 +114,20 @@ - - - - - + + + + + diff --git a/namespacech_1_1syst.js b/namespacech_1_1syst.js index 0ea3691d478..66bcaa5f449 100644 --- a/namespacech_1_1syst.js +++ b/namespacech_1_1syst.js @@ -1,12 +1,17 @@ var namespacech_1_1syst = [ - [ "analysis", "structch_1_1syst_1_1analysis.html", "structch_1_1syst_1_1analysis" ], + [ "detail", "namespacech_1_1syst_1_1detail.html", [ + [ "cross_imp", "namespacech_1_1syst_1_1detail.html#a54c49b65dbe6b3a81b35285e8bf6e301", null ], + [ "cross_imp", "namespacech_1_1syst_1_1detail.html#a3bf4d0fb6e19a9de3255b6741b5274d7", null ], + [ "cross", "namespacech_1_1syst_1_1detail.html#a67a602daf8c00931aea63667430d94a8", null ] + ] ], [ "bin", "structch_1_1syst_1_1bin.html", "structch_1_1syst_1_1bin" ], - [ "bin_id", "classch_1_1syst_1_1bin__id.html", "classch_1_1syst_1_1bin__id" ], - [ "channel", "structch_1_1syst_1_1channel.html", "structch_1_1syst_1_1channel" ], + [ "analysis", "structch_1_1syst_1_1analysis.html", "structch_1_1syst_1_1analysis" ], [ "era", "structch_1_1syst_1_1era.html", "structch_1_1syst_1_1era" ], + [ "channel", "structch_1_1syst_1_1channel.html", "structch_1_1syst_1_1channel" ], [ "mass", "structch_1_1syst_1_1mass.html", "structch_1_1syst_1_1mass" ], [ "process", "structch_1_1syst_1_1process.html", "structch_1_1syst_1_1process" ], + [ "bin_id", "classch_1_1syst_1_1bin__id.html", "classch_1_1syst_1_1bin__id" ], [ "SystMap", "classch_1_1syst_1_1_syst_map.html", "classch_1_1syst_1_1_syst_map" ], [ "SystMapAsymm", "classch_1_1syst_1_1_syst_map_asymm.html", "classch_1_1syst_1_1_syst_map_asymm" ], [ "SystMapFunc", "classch_1_1syst_1_1_syst_map_func.html", "classch_1_1syst_1_1_syst_map_func" ] diff --git a/namespacech_1_1syst_1_1detail.html b/namespacech_1_1syst_1_1detail.html index 9c3c81b32b4..ef85b59c2b2 100644 --- a/namespacech_1_1syst_1_1detail.html +++ b/namespacech_1_1syst_1_1detail.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::detail Namespace Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Data Structures

    struct  analysis
     
    struct  bin
     
    class  bin_id
     
    struct  channel
    struct  analysis
     
    struct  era
     
    struct  channel
     
    struct  mass
     
    struct  process
     
    class  bin_id
     
    class  SystMap
     
    class  SystMapAsymm
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    diff --git a/namespacech_1_1tupleprint.html b/namespacech_1_1tupleprint.html index 81c5c0d4c3e..96084eb05c3 100644 --- a/namespacech_1_1tupleprint.html +++ b/namespacech_1_1tupleprint.html @@ -4,7 +4,7 @@ - + CombineHarvester: ch::tupleprint Namespace Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - + @@ -83,7 +80,7 @@
    @@ -113,10 +110,10 @@ Data Structures

    struct  TuplePrinter   -struct  TuplePrinter< Tuple, 0 > -  struct  TuplePrinter< Tuple, 1 >   +struct  TuplePrinter< Tuple, 0 > diff --git a/namespacech_1_1tupleprint.js b/namespacech_1_1tupleprint.js index 328d81b5806..442956dc6be 100644 --- a/namespacech_1_1tupleprint.js +++ b/namespacech_1_1tupleprint.js @@ -1,6 +1,6 @@ var namespacech_1_1tupleprint = [ [ "TuplePrinter", "structch_1_1tupleprint_1_1_tuple_printer.html", null ], - [ "TuplePrinter< Tuple, 0 >", "structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html", null ], - [ "TuplePrinter< Tuple, 1 >", "structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html", null ] + [ "TuplePrinter< Tuple, 1 >", "structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html", null ], + [ "TuplePrinter< Tuple, 0 >", "structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html", null ] ]; \ No newline at end of file diff --git a/namespacemembers.html b/namespacemembers.html index 168171333ca..99e6a20aae1 100644 --- a/namespacemembers.html +++ b/namespacemembers.html @@ -4,7 +4,7 @@ - + CombineHarvester: Namespace Members @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -106,7 +103,7 @@

    - a -

    - + @@ -83,7 +80,7 @@
    @@ -106,7 +103,7 @@

    - a -

    - + @@ -83,7 +80,7 @@
    diff --git a/namespacemembers_vars.html b/namespaceplotting.html similarity index 83% rename from namespacemembers_vars.html rename to namespaceplotting.html index c511239260e..1688a0e75e9 100644 --- a/namespacemembers_vars.html +++ b/namespaceplotting.html @@ -4,8 +4,8 @@ - -CombineHarvester: Namespace Members + +CombineHarvester: plotting Namespace Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - + @@ -83,7 +80,7 @@
    @@ -101,12 +98,11 @@
    +
    +
    +
    plotting Namespace Reference
    +
    diff --git a/namespacepython.html b/namespacepython.html deleted file mode 100644 index c1e296fb476..00000000000 --- a/namespacepython.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -CombineHarvester: python Namespace Reference - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    CombineHarvester -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    python Namespace Reference
    -
    -
    - - - - -

    -Namespaces

     plotting
     
    -
    -
    - - - - diff --git a/namespacepython.js b/namespacepython.js deleted file mode 100644 index 1d4f821d4ba..00000000000 --- a/namespacepython.js +++ /dev/null @@ -1,4 +0,0 @@ -var namespacepython = -[ - [ "plotting", "namespacepython_1_1plotting.html", null ] -]; \ No newline at end of file diff --git a/namespacepython_1_1plotting.html b/namespacepython_1_1plotting.html deleted file mode 100644 index 0d6682df345..00000000000 --- a/namespacepython_1_1plotting.html +++ /dev/null @@ -1,3272 +0,0 @@ - - - - - - - -CombineHarvester: python.plotting Namespace Reference - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    CombineHarvester -
    -
    - - - - - - -
    -
    -
    - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    python.plotting Namespace Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    def getOverlayMarkerAndLegend (legend, entries, options, borderSize=2.0/3, markerStyle="P")
     
    Global Style

    Set the properties of the global gStyle object and create colours and colour palettes

    -
    def SetTDRStyle ()
     Sets the PubComm recommended style. More...
     
    def ModTDRStyle (width=600, height=600, t=0.06, b=0.12, l=0.16, r=0.04)
     Modified version of the tdrStyle. More...
     
    def SetBirdPalette ()
     
    def SetDeepSeaPalette ()
     
    def SetCorrMatrixPalette ()
     
    def CreateTransparentColor (color, alpha)
     
    def Set (obj, **kwargs)
     
    TPad Layout

    Create TPads for pre-defined layouts, for example adding a smaller lower TPad to contain ratios of objects in the main pad.

    -
    def OnePad ()
     
    def TwoPadSplit (split_point, gap_low, gap_high)
     
    def ThreePadSplit (upper_split_point, split_point, gap_low, gap_high)
     
    def MultiRatioSplit (split_points, gaps_low, gaps_high)
     Create a set of TPads split vertically on the TCanvas. More...
     
    def TwoPadSplitColumns (split_point, gap_left, gap_right)
     
    def MultiRatioSplitColumns (split_points, gaps_left, gaps_right)
     
    def SetupTwoPadSplitAsRatio (pads, upper, lower, y_title, y_centered, y_min, y_max)
     
    def StandardAxes (xaxis, yaxis, var, units, fmt='.1f')
     
    Axis histograms

    By default the first TH1 or TGraph drawn on a pad takes control of the x- and y-axis settings. A better way is to create dedicated "axis" TH1s that can be drawn first, one per pad, which will then control all the axis properties.

    -
    def CreateAxisHist (src, at_limits=True)
     
    def CreateAxisHists (n, src, at_limits)
     
    def GetAxisHist (pad)
     
    TFile functions

    A collection of functions for working with TFiles.

    -
    def TFileIsGood (filename)
     Performs a series of tests on a TFile to ensure that it can be opened without errors. More...
     
    def MakeTChain (files, tree)
     
    def Get (file, obj)
     
    def ParamFromFilename (filename, param)
     
    Object creation

    These functions take existing objects (TH1s, TGraphs, TTrees, etc) and build new objects

    -
    def TGraphFromTree (tree, xvar, yvar, selection)
     
    def TGraph2DFromTree (tree, xvar, yvar, zvar, selection)
     
    def RocCurveFrom1DHists (h_x, h_y, cut_is_greater_than)
     
    def TH2FromTGraph2D (graph, method='BinEdgeAligned', force_x_width=None, force_y_width=None)
     Build an empty TH2 from the set of points in a TGraph2D. More...
     
    def MakeErrorBand (LowerGraph, UpperGraph)
     
    def LimitTGraphFromJSON (js, label)
     
    def LimitTGraphFromJSONFile (jsfile, label)
     
    def ToyTGraphFromJSON (js, label)
     
    def ToyTGraphFromJSONFile (jsfile, label)
     
    def LimitBandTGraphFromJSON (js, central, lo, hi)
     
    def StandardLimitsFromJSONFile (json_file, draw=['obs', 'exp0', 'exp1', 'exp2'])
     
    def bestFit (tree, x, y, cut)
     
    def treeToHist2D (t, x, y, name, cut, xmin, xmax, ymin, ymax, xbins, ybins)
     
    def makeHist1D (name, xbins, graph, scaleXrange=1.0, absoluteXrange=None)
     
    def makeHist2D (name, xbins, ybins, graph2d)
     
    def makeVarBinHist2D (name, xbins, ybins)
     
    def GraphDifference (graph1, graph2, relative)
     
    def GraphDivide (num, den)
     
    def MakeRatioHist (num, den, num_err, den_err)
     Make a new ratio TH1 from numerator and denominator TH1s with optional error propagation. More...
     
    Graph manipulation

    These functions are mostly used to modify TGraphs corresponding to likelihood scans.

    -
    def RemoveGraphXDuplicates (graph)
     
    def ApplyGraphYOffset (graph, y_off)
     
    def RemoveGraphYAll (graph, val)
     
    def RemoveSmallDelta (graph, val)
     
    def RemoveGraphYAbove (graph, val)
     
    def SetMinToZero (graph)
     
    def ImproveMinimum (graph, func, doIt=False)
     
    def FindCrossingsWithSpline (graph, func, yval)
     
    def ReZeroTGraph (gr, doIt=False)
     
    def FilterGraph (gr, n=3)
     
    def RemoveInXRange (gr, xmin=0, xmax=1)
     
    def RemoveNearMin (graph, val, spacing=None)
     
    def SortGraph (Graph)
     
    TPad adjustments

    These functions are mostly concerned with adjusting the axis ranges to make sure objects are not being drawn outside the range of the pad or underneath other objects, e.g. the legend.

    -
    def FixTopRange (pad, fix_y, fraction)
     
    def FixBothRanges (pad, fix_y_lo, frac_lo, fix_y_hi, frac_hi)
     Adjusts y-axis range such that a lower and a higher value are located a fixed fraction of the frame height away from a new minimum and maximum respectively. More...
     
    def GetPadYMaxInRange (pad, x_min, x_max, do_min=False)
     
    def GetPadYMax (pad, do_min=False)
     
    def GetPadYMin (pad)
     
    def FixOverlay ()
     
    def FixBoxPadding (pad, box, frac)
     
    Decoration

    Functions for drawing legends, logos, title, lines and boxes

    -
    def StandardAxes (xaxis, yaxis, var, units)
     
    def DrawCMSLogo (pad, cmsText, extraText, iPosX, relPosX, relPosY, relExtraDY, extraText2='', cmsTextSize=0.8)
     Blah. More...
     
    def PositionedLegend (width, height, pos, offset, horizontaloffset=None)
     
    def DrawHorizontalLine (pad, line, yval)
     
    def DrawVerticalLine (pad, line, xval)
     
    def DrawVerticalBand (pad, box, x1, x2)
     
    def DrawTitle (pad, text, align, textOffset=0.2, textSize=0.6)
     
    Limit plotting

    Common limit-plotting tasks, for example setting the Brazilian colour scheme for expected limit bands and drawing the associated TGraphs in the correct order

    -
    def isclose (a, b, rel_tol=1e-9, abs_tol=0.0)
     
    def StyleLimitBand (graph_dict, overwrite_style_dict=None)
     
    def DrawLimitBand (pad, graph_dict, draw=['exp2', 'exp1', 'exp0', 'obs'], draw_legend=None, legend=None, legend_overwrite=None)
     
    Contour plotting

    Creating contour TGraphs using TH2s and TGraph2Ds

    -
    def contourFromTH2 (h2in, threshold, minPoints=10, frameValue=1000.)
     
    def frameTH2D (hist, threshold, frameValue=1000)
     
    def fastFillTH2 (hist2d, graph, initalValue=99999, interpolateMissing=False)
     
    def fillTH2 (hist2d, graph)
     
    def fillInvertedTH2 (hist2d, graph)
     
    def NewInterpolate (hist)
     
    def rebin (hist)
     
    def higgsConstraint (model, higgstype)
     
    - - - -

    -Variables

    list COL_STORE = []
     
    -

    Function Documentation

    - -

    ◆ SetTDRStyle()

    - -
    -
    - - - - - - - -
    def python.plotting.SetTDRStyle ()
    -
    - -

    Sets the PubComm recommended style.

    -

    Just a copy of http://ghm.web.cern.ch/ghm/plots/MacroExample/tdrstyle.C

    See also
    ModTDRStyle() to use this style with some additional customisation.
    - -

    Definition at line 26 of file plotting.py.

    - -
    -
    - -

    ◆ ModTDRStyle()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.ModTDRStyle ( width = 600,
     height = 600,
     t = 0.06,
     b = 0.12,
     l = 0.16,
     r = 0.04 
    )
    -
    - -

    Modified version of the tdrStyle.

    -
    Parameters
    - - - - - - - -
    widthCanvas width in pixels
    heightCanvas height in pixels
    tPad top margin [0-1]
    bPad bottom margin [0-1]
    lPad left margin [0-1]
    rPad right margin [0-1]
    -
    -
    - -

    Definition at line 177 of file plotting.py.

    - -
    -
    - -

    ◆ SetBirdPalette()

    - -
    -
    - - - - - - - -
    def python.plotting.SetBirdPalette ()
    -
    - -

    Definition at line 251 of file plotting.py.

    - -
    -
    - -

    ◆ SetDeepSeaPalette()

    - -
    -
    - - - - - - - -
    def python.plotting.SetDeepSeaPalette ()
    -
    - -

    Definition at line 264 of file plotting.py.

    - -
    -
    - -

    ◆ SetCorrMatrixPalette()

    - -
    -
    - - - - - - - -
    def python.plotting.SetCorrMatrixPalette ()
    -
    - -

    Definition at line 277 of file plotting.py.

    - -
    -
    - -

    ◆ CreateTransparentColor()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.CreateTransparentColor ( color,
     alpha 
    )
    -
    - -

    Definition at line 286 of file plotting.py.

    - -
    -
    - -

    ◆ Set()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.Set ( obj,
    ** kwargs 
    )
    -
    - -

    Definition at line 296 of file plotting.py.

    - -
    -
    - -

    ◆ OnePad()

    - -
    -
    - - - - - - - -
    def python.plotting.OnePad ()
    -
    - -

    Definition at line 314 of file plotting.py.

    - -
    -
    - -

    ◆ TwoPadSplit()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.TwoPadSplit ( split_point,
     gap_low,
     gap_high 
    )
    -
    - -

    Definition at line 322 of file plotting.py.

    - -
    -
    - -

    ◆ ThreePadSplit()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.ThreePadSplit ( upper_split_point,
     split_point,
     gap_low,
     gap_high 
    )
    -
    - -

    Definition at line 335 of file plotting.py.

    - -
    -
    - -

    ◆ MultiRatioSplit()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.MultiRatioSplit ( split_points,
     gaps_low,
     gaps_high 
    )
    -
    - -

    Create a set of TPads split vertically on the TCanvas.

    -

    This is a generalisation of the two pad main/ratio split but for the case of multiple ratio pads.

    -
    Parameters
    - - - - -
    split_pointsHeight of each ratio pad as a fraction of the canvas height. Pads will be created from the bottom of the frame upwards. The final, main pad will occupy however much space remains, therefore the size of this list should be [number of pads] - 1.
    gaps_lowGaps between ratio pad frames created on the lower pad side at each boundary. Give a list of zeroes for no gap between pad frames. Should be the same length as split_points.1
    gaps_highGaps between ratio pad frames created on the upper pad side at each boundary. Give a list of zeroes for no gap between pad frames.
    -
    -
    -
    Returns
    -
    -list List of TPads, indexed from top to bottom on the canvas.
    - -

    Definition at line 374 of file plotting.py.

    - -
    -
    - -

    ◆ TwoPadSplitColumns()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.TwoPadSplitColumns ( split_point,
     gap_left,
     gap_right 
    )
    -
    - -

    Definition at line 389 of file plotting.py.

    - -
    -
    - -

    ◆ MultiRatioSplitColumns()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.MultiRatioSplitColumns ( split_points,
     gaps_left,
     gaps_right 
    )
    -
    - -

    Definition at line 403 of file plotting.py.

    - -
    -
    - -

    ◆ SetupTwoPadSplitAsRatio()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.SetupTwoPadSplitAsRatio ( pads,
     upper,
     lower,
     y_title,
     y_centered,
     y_min,
     y_max 
    )
    -
    - -

    Definition at line 419 of file plotting.py.

    - -
    -
    - -

    ◆ StandardAxes() [1/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.StandardAxes ( xaxis,
     yaxis,
     var,
     units,
     fmt = '.1f' 
    )
    -
    - -

    Definition at line 437 of file plotting.py.

    - -
    -
    - -

    ◆ CreateAxisHist()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.CreateAxisHist ( src,
     at_limits = True 
    )
    -
    - -

    Definition at line 460 of file plotting.py.

    - -
    -
    - -

    ◆ CreateAxisHists()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.CreateAxisHists ( n,
     src,
     at_limits 
    )
    -
    - -

    Definition at line 485 of file plotting.py.

    - -
    -
    - -

    ◆ GetAxisHist()

    - -
    -
    - - - - - - - - -
    def python.plotting.GetAxisHist ( pad)
    -
    - -

    Definition at line 493 of file plotting.py.

    - -
    -
    - -

    ◆ TFileIsGood()

    - -
    -
    - - - - - - - - -
    def python.plotting.TFileIsGood ( filename)
    -
    - -

    Performs a series of tests on a TFile to ensure that it can be opened without errors.

    -
    Parameters
    - - -
    filenamestr The name of the TFile to check
    -
    -
    -
    Returns
    bool True if the file can opened, is not a zombie, and if ROOT did not need to try and recover the contents
    - -

    Definition at line 527 of file plotting.py.

    - -
    -
    - -

    ◆ MakeTChain()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.MakeTChain ( files,
     tree 
    )
    -
    - -

    Definition at line 545 of file plotting.py.

    - -
    -
    - -

    ◆ Get()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.Get ( file,
     obj 
    )
    -
    - -

    Definition at line 552 of file plotting.py.

    - -
    -
    - -

    ◆ ParamFromFilename()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.ParamFromFilename ( filename,
     param 
    )
    -
    - -

    Definition at line 560 of file plotting.py.

    - -
    -
    - -

    ◆ TGraphFromTree()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.TGraphFromTree ( tree,
     xvar,
     yvar,
     selection 
    )
    -
    - -

    Definition at line 581 of file plotting.py.

    - -
    -
    - -

    ◆ TGraph2DFromTree()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.TGraph2DFromTree ( tree,
     xvar,
     yvar,
     zvar,
     selection 
    )
    -
    - -

    Definition at line 587 of file plotting.py.

    - -
    -
    - -

    ◆ RocCurveFrom1DHists()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.RocCurveFrom1DHists ( h_x,
     h_y,
     cut_is_greater_than 
    )
    -
    - -

    Definition at line 594 of file plotting.py.

    - -
    -
    - -

    ◆ TH2FromTGraph2D()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.TH2FromTGraph2D ( graph,
     method = 'BinEdgeAligned',
     force_x_width = None,
     force_y_width = None 
    )
    -
    - -

    Build an empty TH2 from the set of points in a TGraph2D.

    -

    There is no unique way to define a TH2 binning given an arbitrary TGraph2D, therefore this function supports multiple named methods:

    -
      -
    • BinEdgeAligned simply takes the sets of x- and y- values in the TGraph2D and uses these as the bin edge arrays in the TH2. The implication of this is that when filling the bin contents interpolation will be required when evaluating the TGraph2D at the bin centres.
    • -
    • BinCenterAligned will try to have the TGraph2D points at the bin centers, but this will only work completely correctly when the input point spacing is regular. The algorithm first identifies the bin width as the smallest interval between points on each axis. The start position of the TH2 axis is then defined as the lowest value in the TGraph2D minus half this width, and the axis continues with regular bins until the graph maximum is passed.
    • -
    -
    Parameters
    - - - - - -
    graphShould have at least two unique x and y values, otherwise we can't define any bins
    methodThe binning algorithm to use
    force_x_widthOverride the derived x-axis bin width in the CenterAligned method
    force_y_widthOverride the derived y-axis bin width in the CenterAligned method
    -
    -
    -
    Exceptions
    - - -
    RuntimeErrorIf the method name is not recognised
    -
    -
    -
    Returns
    -
    -TH2F The exact binning of the TH2F depends on the chosen method
    - -

    Definition at line 670 of file plotting.py.

    - -
    -
    - -

    ◆ MakeErrorBand()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.MakeErrorBand ( LowerGraph,
     UpperGraph 
    )
    -
    - -

    Definition at line 712 of file plotting.py.

    - -
    -
    - -

    ◆ LimitTGraphFromJSON()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.LimitTGraphFromJSON ( js,
     label 
    )
    -
    - -

    Definition at line 730 of file plotting.py.

    - -
    -
    - -

    ◆ LimitTGraphFromJSONFile()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.LimitTGraphFromJSONFile ( jsfile,
     label 
    )
    -
    - -

    Definition at line 741 of file plotting.py.

    - -
    -
    - -

    ◆ ToyTGraphFromJSON()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.ToyTGraphFromJSON ( js,
     label 
    )
    -
    - -

    Definition at line 746 of file plotting.py.

    - -
    -
    - -

    ◆ ToyTGraphFromJSONFile()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.ToyTGraphFromJSONFile ( jsfile,
     label 
    )
    -
    - -

    Definition at line 768 of file plotting.py.

    - -
    -
    - -

    ◆ LimitBandTGraphFromJSON()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.LimitBandTGraphFromJSON ( js,
     central,
     lo,
     hi 
    )
    -
    - -

    Definition at line 773 of file plotting.py.

    - -
    -
    - -

    ◆ StandardLimitsFromJSONFile()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.StandardLimitsFromJSONFile ( json_file,
     draw = ['obs', 'exp0', 'exp1', 'exp2'] 
    )
    -
    - -

    Definition at line 789 of file plotting.py.

    - -
    -
    - -

    ◆ bestFit()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.bestFit ( tree,
     x,
     y,
     cut 
    )
    -
    - -

    Definition at line 805 of file plotting.py.

    - -
    -
    - -

    ◆ treeToHist2D()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.treeToHist2D ( t,
     x,
     y,
     name,
     cut,
     xmin,
     xmax,
     ymin,
     ymax,
     xbins,
     ybins 
    )
    -
    - -

    Definition at line 820 of file plotting.py.

    - -
    -
    - -

    ◆ makeHist1D()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.makeHist1D ( name,
     xbins,
     graph,
     scaleXrange = 1.0,
     absoluteXrange = None 
    )
    -
    - -

    Definition at line 838 of file plotting.py.

    - -
    -
    - -

    ◆ makeHist2D()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.makeHist2D ( name,
     xbins,
     ybins,
     graph2d 
    )
    -
    - -

    Definition at line 849 of file plotting.py.

    - -
    -
    - -

    ◆ makeVarBinHist2D()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.makeVarBinHist2D ( name,
     xbins,
     ybins 
    )
    -
    - -

    Definition at line 859 of file plotting.py.

    - -
    -
    - -

    ◆ GraphDifference()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.GraphDifference ( graph1,
     graph2,
     relative 
    )
    -
    - -

    Definition at line 888 of file plotting.py.

    - -
    -
    - -

    ◆ GraphDivide()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.GraphDivide ( num,
     den 
    )
    -
    - -

    Definition at line 904 of file plotting.py.

    - -
    -
    - -

    ◆ MakeRatioHist()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.MakeRatioHist ( num,
     den,
     num_err,
     den_err 
    )
    -
    - -

    Make a new ratio TH1 from numerator and denominator TH1s with optional error propagation.

    -
    Parameters
    - - - - - -
    numNumerator histogram
    denDenominator histogram
    num_errPropagate the error in the numerator TH1
    den_errPropagate the error in the denominator TH1
    -
    -
    -
    Returns
    -
    -TH1 A new TH1 containing the ratio
    - -

    Definition at line 928 of file plotting.py.

    - -
    -
    - -

    ◆ RemoveGraphXDuplicates()

    - -
    -
    - - - - - - - - -
    def python.plotting.RemoveGraphXDuplicates ( graph)
    -
    - -

    Definition at line 947 of file plotting.py.

    - -
    -
    - -

    ◆ ApplyGraphYOffset()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.ApplyGraphYOffset ( graph,
     y_off 
    )
    -
    - -

    Definition at line 957 of file plotting.py.

    - -
    -
    - -

    ◆ RemoveGraphYAll()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.RemoveGraphYAll ( graph,
     val 
    )
    -
    - -

    Definition at line 962 of file plotting.py.

    - -
    -
    - -

    ◆ RemoveSmallDelta()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.RemoveSmallDelta ( graph,
     val 
    )
    -
    - -

    Definition at line 971 of file plotting.py.

    - -
    -
    - -

    ◆ RemoveGraphYAbove()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.RemoveGraphYAbove ( graph,
     val 
    )
    -
    - -

    Definition at line 981 of file plotting.py.

    - -
    -
    - -

    ◆ SetMinToZero()

    - -
    -
    - - - - - - - - -
    def python.plotting.SetMinToZero ( graph)
    -
    - -

    Definition at line 991 of file plotting.py.

    - -
    -
    - -

    ◆ ImproveMinimum()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.ImproveMinimum ( graph,
     func,
     doIt = False 
    )
    -
    - -

    Definition at line 1003 of file plotting.py.

    - -
    -
    - -

    ◆ FindCrossingsWithSpline()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.FindCrossingsWithSpline ( graph,
     func,
     yval 
    )
    -
    - -

    Definition at line 1040 of file plotting.py.

    - -
    -
    - -

    ◆ ReZeroTGraph()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.ReZeroTGraph ( gr,
     doIt = False 
    )
    -
    - -

    Definition at line 1087 of file plotting.py.

    - -
    -
    - -

    ◆ FilterGraph()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.FilterGraph ( gr,
     n = 3 
    )
    -
    - -

    Definition at line 1112 of file plotting.py.

    - -
    -
    - -

    ◆ RemoveInXRange()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.RemoveInXRange ( gr,
     xmin = 0,
     xmax = 1 
    )
    -
    - -

    Definition at line 1126 of file plotting.py.

    - -
    -
    - -

    ◆ RemoveNearMin()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.RemoveNearMin ( graph,
     val,
     spacing = None 
    )
    -
    - -

    Definition at line 1138 of file plotting.py.

    - -
    -
    - -

    ◆ SortGraph()

    - -
    -
    - - - - - - - - -
    def python.plotting.SortGraph ( Graph)
    -
    - -

    Definition at line 1166 of file plotting.py.

    - -
    -
    - -

    ◆ FixTopRange()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.FixTopRange ( pad,
     fix_y,
     fraction 
    )
    -
    - -

    Definition at line 1186 of file plotting.py.

    - -
    -
    - -

    ◆ FixBothRanges()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.FixBothRanges ( pad,
     fix_y_lo,
     frac_lo,
     fix_y_hi,
     frac_hi 
    )
    -
    - -

    Adjusts y-axis range such that a lower and a higher value are located a fixed fraction of the frame height away from a new minimum and maximum respectively.

    -

    This function is useful in conjunction with GetPadYMax which returns the maximum or minimum y value of all histograms and graphs drawn on the pad.

    -

    In the example below, the minimum and maximum values found via this function are used as the fix_y_lo and fix_y_hi arguments, and the spacing fractions as 0.15 and 0.30 respectively.

    -
    FixBothRanges(pad, GetPadYMin(pad), 0.15, GetPadYMax(pad), 0.30)
    -
    - -
    -
    Parameters
    - - - - - - -
    padA TPad on which histograms and graphs have already been drawn
    fix_y_loThe y value which will end up a fraction frac_lo above the new axis minimum.
    frac_loA fraction of the y-axis height
    fix_y_hiThe y value which will end up a fraction frac_hi below from the new axis maximum.
    frac_hiA fraction of the y-axis height
    -
    -
    - -

    Definition at line 1226 of file plotting.py.

    - -
    -
    - -

    ◆ GetPadYMaxInRange()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.GetPadYMaxInRange ( pad,
     x_min,
     x_max,
     do_min = False 
    )
    -
    - -

    Definition at line 1252 of file plotting.py.

    - -
    -
    - -

    ◆ GetPadYMax()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.GetPadYMax ( pad,
     do_min = False 
    )
    -
    - -

    Definition at line 1310 of file plotting.py.

    - -
    -
    - -

    ◆ GetPadYMin()

    - -
    -
    - - - - - - - - -
    def python.plotting.GetPadYMin ( pad)
    -
    - -

    Definition at line 1319 of file plotting.py.

    - -
    -
    - -

    ◆ FixOverlay()

    - -
    -
    - - - - - - - -
    def python.plotting.FixOverlay ()
    -
    - -

    Definition at line 1323 of file plotting.py.

    - -
    -
    - -

    ◆ FixBoxPadding()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.FixBoxPadding ( pad,
     box,
     frac 
    )
    -
    - -

    Definition at line 1328 of file plotting.py.

    - -
    -
    - -

    ◆ StandardAxes() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.StandardAxes ( xaxis,
     yaxis,
     var,
     units 
    )
    -
    - -

    Definition at line 1372 of file plotting.py.

    - -
    -
    - -

    ◆ DrawCMSLogo()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.DrawCMSLogo ( pad,
     cmsText,
     extraText,
     iPosX,
     relPosX,
     relPosY,
     relExtraDY,
     extraText2 = '',
     cmsTextSize = 0.8 
    )
    -
    - -

    Blah.

    -
    Parameters
    - - - - - - - - - - -
    padDescription
    cmsTextDescription
    extraTextDescription
    iPosXDescription
    relPosXDescription
    relPosYDescription
    relExtraDYDescription
    extraText2Description
    cmsTextSizeDescription
    -
    -
    -
    Returns
    -
    -TYPE Description
    - -

    Definition at line 1399 of file plotting.py.

    - -
    -
    - -

    ◆ PositionedLegend()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.PositionedLegend ( width,
     height,
     pos,
     offset,
     horizontaloffset = None 
    )
    -
    - -

    Definition at line 1492 of file plotting.py.

    - -
    -
    - -

    ◆ DrawHorizontalLine()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.DrawHorizontalLine ( pad,
     line,
     yval 
    )
    -
    - -

    Definition at line 1519 of file plotting.py.

    - -
    -
    - -

    ◆ DrawVerticalLine()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.DrawVerticalLine ( pad,
     line,
     xval 
    )
    -
    - -

    Definition at line 1526 of file plotting.py.

    - -
    -
    - -

    ◆ DrawVerticalBand()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.DrawVerticalBand ( pad,
     box,
     x1,
     x2 
    )
    -
    - -

    Definition at line 1532 of file plotting.py.

    - -
    -
    - -

    ◆ DrawTitle()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.DrawTitle ( pad,
     text,
     align,
     textOffset = 0.2,
     textSize = 0.6 
    )
    -
    - -

    Definition at line 1539 of file plotting.py.

    - -
    -
    - -

    ◆ isclose()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.isclose ( a,
     b,
     rel_tol = 1e-9,
     abs_tol = 0.0 
    )
    -
    - -

    Definition at line 1583 of file plotting.py.

    - -
    -
    - -

    ◆ StyleLimitBand()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.StyleLimitBand ( graph_dict,
     overwrite_style_dict = None 
    )
    -
    - -

    Definition at line 1586 of file plotting.py.

    - -
    -
    - -

    ◆ DrawLimitBand()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.DrawLimitBand ( pad,
     graph_dict,
     draw = ['exp2', 'exp1', 'exp0', 'obs'],
     draw_legend = None,
     legend = None,
     legend_overwrite = None 
    )
    -
    - -

    Definition at line 1602 of file plotting.py.

    - -
    -
    - -

    ◆ contourFromTH2()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.contourFromTH2 ( h2in,
     threshold,
     minPoints = 10,
     frameValue = 1000. 
    )
    -
    - -

    Definition at line 1636 of file plotting.py.

    - -
    -
    - -

    ◆ frameTH2D()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.frameTH2D ( hist,
     threshold,
     frameValue = 1000 
    )
    -
    - -

    Definition at line 1675 of file plotting.py.

    - -
    -
    - -

    ◆ fastFillTH2()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.fastFillTH2 ( hist2d,
     graph,
     initalValue = 99999,
     interpolateMissing = False 
    )
    -
    - -

    Definition at line 1742 of file plotting.py.

    - -
    -
    - -

    ◆ fillTH2()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.fillTH2 ( hist2d,
     graph 
    )
    -
    - -

    Definition at line 1761 of file plotting.py.

    - -
    -
    - -

    ◆ fillInvertedTH2()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.fillInvertedTH2 ( hist2d,
     graph 
    )
    -
    - -

    Definition at line 1769 of file plotting.py.

    - -
    -
    - -

    ◆ NewInterpolate()

    - -
    -
    - - - - - - - - -
    def python.plotting.NewInterpolate ( hist)
    -
    - -

    Definition at line 1782 of file plotting.py.

    - -
    -
    - -

    ◆ rebin()

    - -
    -
    - - - - - - - - -
    def python.plotting.rebin ( hist)
    -
    - -

    Definition at line 1871 of file plotting.py.

    - -
    -
    - -

    ◆ higgsConstraint()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    def python.plotting.higgsConstraint ( model,
     higgstype 
    )
    -
    - -

    Definition at line 1898 of file plotting.py.

    - -
    -
    - -

    ◆ getOverlayMarkerAndLegend()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def python.plotting.getOverlayMarkerAndLegend ( legend,
     entries,
     options,
     borderSize = 2.0/3,
     markerStyle = "P" 
    )
    -
    - -

    Definition at line 1920 of file plotting.py.

    - -
    -
    -

    Variable Documentation

    - -

    ◆ COL_STORE

    - -
    -
    - - - - -
    list python.plotting.COL_STORE = []
    -
    - -

    Definition at line 12 of file plotting.py.

    - -
    -
    -
    -
    -
    def GetPadYMax(pad, do_min=False)
    Definition: plotting.py:1310
    -
    def FixBothRanges(pad, fix_y_lo, frac_lo, fix_y_hi, frac_hi)
    Adjusts y-axis range such that a lower and a higher value are located a fixed fraction of the frame h...
    Definition: plotting.py:1226
    -
    def GetPadYMin(pad)
    Definition: plotting.py:1319
    - - - - diff --git a/namespaces.html b/namespaces.html index df9e1369fa2..77287112b40 100644 --- a/namespaces.html +++ b/namespaces.html @@ -4,7 +4,7 @@ - + CombineHarvester: Namespace List @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -111,9 +108,35 @@  Nch  Nsyst  Ndetail - Ntupleprint - Npython - Nplotting + Cbin + Canalysis + Cera + Cchannel + Cmass + Cprocess + Cbin_id + CSystMap + CSystMapAsymm + CSystMapFunc + Ntupleprint + CTuplePrinter + CTuplePrinter< Tuple, 1 > + CTuplePrinter< Tuple, 0 > + CAutoRebinTests for any bins below a certain threshold and if they exist merges them with neighborouring bins + CBinByBinFactoryMerges bin uncertainties and creates bin-by-bin statistical uncertainties + CCardWriterAutomates the writing of datacards into directory structures + CCombineHarvester + CHistMapping + CFnTimerDetermine the total amount of time spent in a function + CToken + CObject + CObservation + CParameter + CProcess + CSOverBInfo + CSystematic + CCMSHistFuncFactory + Nplotting
    diff --git a/namespaces_dup.js b/namespaces_dup.js index 035a0d0feee..207e6d0f9a5 100644 --- a/namespaces_dup.js +++ b/namespaces_dup.js @@ -1,5 +1,5 @@ var namespaces_dup = [ [ "ch", "namespacech.html", "namespacech" ], - [ "python", "namespacepython.html", "namespacepython" ] + [ "plotting", "namespaceplotting.html", null ] ]; \ No newline at end of file diff --git a/navtree.js b/navtree.js index edc31efc681..1e272d31d4a 100644 --- a/navtree.js +++ b/navtree.js @@ -1,24 +1,26 @@ /* - @licstart The following is the entire license notice for the - JavaScript code in this file. + @licstart The following is the entire license notice for the JavaScript code in this file. - Copyright (C) 1997-2019 by Dimitri van Heesch + The MIT License (MIT) - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License as - published by the Free Software Foundation. + Copyright (C) 1997-2020 by Dimitri van Heesch - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. - @licend The above is the entire license notice - for the JavaScript code in this file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file */ var navTreeSubIndices = new Array(); var arrowDown = '▼'; diff --git a/navtreedata.js b/navtreedata.js index bf31e1e14a3..2e8f7a7d46a 100644 --- a/navtreedata.js +++ b/navtreedata.js @@ -1,24 +1,26 @@ /* -@licstart The following is the entire license notice for the -JavaScript code in this file. + @licstart The following is the entire license notice for the JavaScript code in this file. -Copyright (C) 1997-2019 by Dimitri van Heesch + The MIT License (MIT) -This program is free software; you can redistribute it and/or modify -it under the terms of version 2 of the GNU General Public License as published by -the Free Software Foundation + Copyright (C) 1997-2020 by Dimitri van Heesch -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. -@licend The above is the entire license notice -for the JavaScript code in this file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file */ var NAVTREE = [ @@ -117,7 +119,6 @@ var NAVTREE = [ "Namespace Members", "namespacemembers.html", [ [ "All", "namespacemembers.html", null ], [ "Functions", "namespacemembers_func.html", null ], - [ "Variables", "namespacemembers_vars.html", null ], [ "Typedefs", "namespacemembers_type.html", null ] ] ] ] ], @@ -147,8 +148,9 @@ var NAVTREEINDEX = [ "_a_zh_systematics_8cc.html", "_process_8cc.html#a8b80f6510601d33e773f90b1160d5463", -"classch_1_1_combine_harvester.html#aaf7c0e7a370d1a43290815e818058735", -"functions_l.html" +"classch_1_1_combine_harvester.html#aadea1e068eb474ba7919b1894033e3d3", +"functions_g.html", +"structch_1_1syst_1_1era.html#a3efbe3d6162bf81819ebc883e6c6ffda" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/navtreeindex1.js b/navtreeindex1.js index 5ed502c65dc..39f5e3c2ec4 100644 --- a/navtreeindex1.js +++ b/navtreeindex1.js @@ -161,93 +161,93 @@ var NAVTREEINDEX1 = "classch_1_1_bin_by_bin_factory.html#ac7a3cd16dbec7d10aefef145b56eb20d":[16,0,0,3,19], "classch_1_1_bin_by_bin_factory.html#ad83ac54b41f5ee9eabc33866bb61b834":[16,0,0,3,0], "classch_1_1_bin_by_bin_factory.html#ad8d08a80d3b39a82b45cd47fb6ac1181":[16,0,0,3,14], -"classch_1_1_c_m_s_hist_func_factory.html":[16,0,0,5], -"classch_1_1_c_m_s_hist_func_factory.html#a4e057f77b7fcdde3e98967bb5632717e":[16,0,0,5,1], -"classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3":[16,0,0,5,3], -"classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60":[16,0,0,5,2], -"classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7":[16,0,0,5,0], +"classch_1_1_c_m_s_hist_func_factory.html":[16,0,0,14], +"classch_1_1_c_m_s_hist_func_factory.html#a4e057f77b7fcdde3e98967bb5632717e":[16,0,0,14,1], +"classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3":[16,0,0,14,3], +"classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60":[16,0,0,14,2], +"classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7":[16,0,0,14,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#a4cc19951d42fb8721be76a5e26cbf0c6":[16,0,0,4,1], "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_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,90], -"classch_1_1_combine_harvester.html#a01d2c826aba1891b7a1a5ce2dba395e4":[16,0,0,6,86], -"classch_1_1_combine_harvester.html#a04ff1eb7d52a251110bef09b3f7be2c4":[16,0,0,6,66], -"classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f":[16,0,0,6,77], -"classch_1_1_combine_harvester.html#a0d3eca727963c0c14a3c04bbdce2ca5e":[16,0,0,6,85], -"classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329":[16,0,0,6,31], -"classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d":[16,0,0,6,95], -"classch_1_1_combine_harvester.html#a19106a6a89c84b90308b34672de6c187":[16,0,0,6,22], -"classch_1_1_combine_harvester.html#a1ecb940a59ea7a2039956a07882e9ccc":[16,0,0,6,89], -"classch_1_1_combine_harvester.html#a1efc38e1377d77deaf5e9c4c8adbb250":[16,0,0,6,33], -"classch_1_1_combine_harvester.html#a20c5575a1983fbd8ff1b4232128610ff":[16,0,0,6,101], -"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,100], -"classch_1_1_combine_harvester.html#a2f6fa74fbaa78ec7f73855dc3473a5f2":[16,0,0,6,58], -"classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0":[16,0,0,6,87], -"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,103], -"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,81], -"classch_1_1_combine_harvester.html#a44064524ffe47ccac63ef8025a6f46dc":[16,0,0,6,62], -"classch_1_1_combine_harvester.html#a44d791bc4812feb68729e7660fd3e5b3":[16,0,0,6,105], -"classch_1_1_combine_harvester.html#a455e0b19f8ff00c2b82d78baf59055a6":[16,0,0,6,51], -"classch_1_1_combine_harvester.html#a45dc5b119b4c0618c0f3e614d48ae2d6":[16,0,0,6,70], -"classch_1_1_combine_harvester.html#a4601ceaf29711b11611545a3ee4a8fbb":[16,0,0,6,84], -"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,74], -"classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5":[16,0,0,6,71], -"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,108], -"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,82], -"classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9":[16,0,0,6,73], -"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#a8598c8d734f7461228d6e4d4a20ba33b":[16,0,0,6,104], -"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,97], -"classch_1_1_combine_harvester.html#a8d7ccde30bda35ec084f4e38b923ef23":[16,0,0,6,88], -"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#a9af81a9db9eb21d656005a3dee30ad6e":[16,0,0,6,6], -"classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5":[16,0,0,6,78], -"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,80], -"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,91], -"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":[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,91], +"classch_1_1_combine_harvester.html#a01d2c826aba1891b7a1a5ce2dba395e4":[16,0,0,5,86], +"classch_1_1_combine_harvester.html#a04ff1eb7d52a251110bef09b3f7be2c4":[16,0,0,5,66], +"classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f":[16,0,0,5,77], +"classch_1_1_combine_harvester.html#a0d3eca727963c0c14a3c04bbdce2ca5e":[16,0,0,5,85], +"classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329":[16,0,0,5,31], +"classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d":[16,0,0,5,96], +"classch_1_1_combine_harvester.html#a19106a6a89c84b90308b34672de6c187":[16,0,0,5,22], +"classch_1_1_combine_harvester.html#a1ecb940a59ea7a2039956a07882e9ccc":[16,0,0,5,89], +"classch_1_1_combine_harvester.html#a1efc38e1377d77deaf5e9c4c8adbb250":[16,0,0,5,33], +"classch_1_1_combine_harvester.html#a20c5575a1983fbd8ff1b4232128610ff":[16,0,0,5,102], +"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#a2dcd4e28456978a5b876ea76acb24c37":[16,0,0,5,90], +"classch_1_1_combine_harvester.html#a2eefb78479b655130b6cf5710bdea33c":[16,0,0,5,101], +"classch_1_1_combine_harvester.html#a2f6fa74fbaa78ec7f73855dc3473a5f2":[16,0,0,5,58], +"classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0":[16,0,0,5,87], +"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,104], +"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,81], +"classch_1_1_combine_harvester.html#a44064524ffe47ccac63ef8025a6f46dc":[16,0,0,5,62], +"classch_1_1_combine_harvester.html#a44d791bc4812feb68729e7660fd3e5b3":[16,0,0,5,106], +"classch_1_1_combine_harvester.html#a455e0b19f8ff00c2b82d78baf59055a6":[16,0,0,5,51], +"classch_1_1_combine_harvester.html#a45dc5b119b4c0618c0f3e614d48ae2d6":[16,0,0,5,70], +"classch_1_1_combine_harvester.html#a4601ceaf29711b11611545a3ee4a8fbb":[16,0,0,5,84], +"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#a59b5a637f7f11c2ee77a9b07bc1deb02":[16,0,0,5,74], +"classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5":[16,0,0,5,71], +"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,109], +"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,82], +"classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9":[16,0,0,5,73], +"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#a8598c8d734f7461228d6e4d4a20ba33b":[16,0,0,5,105], +"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,98], +"classch_1_1_combine_harvester.html#a8d7ccde30bda35ec084f4e38b923ef23":[16,0,0,5,88], +"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#a9af81a9db9eb21d656005a3dee30ad6e":[16,0,0,5,6], +"classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5":[16,0,0,5,78], +"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,80], +"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,92], +"classch_1_1_combine_harvester.html#aab6a698c192aa091178bbd8dfbd0266f":[16,0,0,5,39] }; diff --git a/navtreeindex2.js b/navtreeindex2.js index 98931da36db..84c43bd6ccb 100644 --- a/navtreeindex2.js +++ b/navtreeindex2.js @@ -1,37 +1,38 @@ var NAVTREEINDEX2 = { -"classch_1_1_combine_harvester.html#aaf7c0e7a370d1a43290815e818058735":[16,0,0,6,102], -"classch_1_1_combine_harvester.html#ab1f4f4e953af6cb2f23b52a69b5900a8":[16,0,0,6,34], -"classch_1_1_combine_harvester.html#ab6ba1e447ab5b290c22c23218ddf64cd":[16,0,0,6,98], -"classch_1_1_combine_harvester.html#ab8656260b678698e1e86cc9a49397d19":[16,0,0,6,106], -"classch_1_1_combine_harvester.html#ab994bb3d7ccc19475a28f5864831841e":[16,0,0,6,55], -"classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810":[16,0,0,6,72], -"classch_1_1_combine_harvester.html#ac3ef7424cb86d12fd294d9c6de98d533":[16,0,0,6,48], -"classch_1_1_combine_harvester.html#ac40e961ea428fa6411ec8e3b6ddeadef":[16,0,0,6,94], -"classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce":[16,0,0,6,75], -"classch_1_1_combine_harvester.html#ac514e331fc81a67fc9d8de884b5666c3":[16,0,0,6,50], -"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,96], -"classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d":[16,0,0,6,12], -"classch_1_1_combine_harvester.html#acf6fe66749432f6ab0efdf5955f08df8":[16,0,0,6,59], -"classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631":[16,0,0,6,44], -"classch_1_1_combine_harvester.html#ad45a973f5947f9a1a09c8d588f778954":[16,0,0,6,68], -"classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0":[16,0,0,6,92], -"classch_1_1_combine_harvester.html#ad61cdbfaea0ed88c09651c2a92c934e2":[16,0,0,6,67], -"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#ae94f5954e44697ce22d5516515c8627c":[16,0,0,6,107], -"classch_1_1_combine_harvester.html#aea305007bd575b568a0e4cf92fdefb4c":[16,0,0,6,54], -"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#af6906e10545d3958d0dd82472272e31e":[16,0,0,6,69], -"classch_1_1_combine_harvester.html#af71f64a1d858700bd16d98cee1c10c26":[16,0,0,6,79], -"classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9":[16,0,0,6,99], -"classch_1_1_combine_harvester.html#afeae4c75ae1a122fdcf0a7f28b15a9d8":[16,0,0,6,83], -"classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689":[16,0,0,6,76], -"classch_1_1_combine_harvester.html#aff8e163ca0abe844603e676d142986a0":[16,0,0,6,93], +"classch_1_1_combine_harvester.html#aadea1e068eb474ba7919b1894033e3d3":[16,0,0,5,13], +"classch_1_1_combine_harvester.html#aaf7c0e7a370d1a43290815e818058735":[16,0,0,5,103], +"classch_1_1_combine_harvester.html#ab1f4f4e953af6cb2f23b52a69b5900a8":[16,0,0,5,34], +"classch_1_1_combine_harvester.html#ab6ba1e447ab5b290c22c23218ddf64cd":[16,0,0,5,99], +"classch_1_1_combine_harvester.html#ab8656260b678698e1e86cc9a49397d19":[16,0,0,5,107], +"classch_1_1_combine_harvester.html#ab994bb3d7ccc19475a28f5864831841e":[16,0,0,5,55], +"classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810":[16,0,0,5,72], +"classch_1_1_combine_harvester.html#ac3ef7424cb86d12fd294d9c6de98d533":[16,0,0,5,48], +"classch_1_1_combine_harvester.html#ac40e961ea428fa6411ec8e3b6ddeadef":[16,0,0,5,95], +"classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce":[16,0,0,5,75], +"classch_1_1_combine_harvester.html#ac514e331fc81a67fc9d8de884b5666c3":[16,0,0,5,50], +"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,97], +"classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d":[16,0,0,5,12], +"classch_1_1_combine_harvester.html#acf6fe66749432f6ab0efdf5955f08df8":[16,0,0,5,59], +"classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631":[16,0,0,5,44], +"classch_1_1_combine_harvester.html#ad45a973f5947f9a1a09c8d588f778954":[16,0,0,5,68], +"classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0":[16,0,0,5,93], +"classch_1_1_combine_harvester.html#ad61cdbfaea0ed88c09651c2a92c934e2":[16,0,0,5,67], +"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#ae94f5954e44697ce22d5516515c8627c":[16,0,0,5,108], +"classch_1_1_combine_harvester.html#aea305007bd575b568a0e4cf92fdefb4c":[16,0,0,5,54], +"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#af6906e10545d3958d0dd82472272e31e":[16,0,0,5,69], +"classch_1_1_combine_harvester.html#af71f64a1d858700bd16d98cee1c10c26":[16,0,0,5,79], +"classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9":[16,0,0,5,100], +"classch_1_1_combine_harvester.html#afeae4c75ae1a122fdcf0a7f28b15a9d8":[16,0,0,5,83], +"classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689":[16,0,0,5,76], +"classch_1_1_combine_harvester.html#aff8e163ca0abe844603e676d142986a0":[16,0,0,5,94], "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], @@ -41,140 +42,142 @@ var NAVTREEINDEX2 = "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#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#a5c94a9f7878cd40ca8aa8f701b6953e3":[16,0,0,9,19], -"classch_1_1_object.html#a740d853956df951a7cb08094e21f0332":[16,0,0,9,8], -"classch_1_1_object.html#a7997c967b45c8048e5d37284634192c8":[16,0,0,9,5], -"classch_1_1_object.html#a7b588d78c22464ebe2b793cbaa2366d3":[16,0,0,9,6], -"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#a8c779be0d578124a56a17031abd86c9f":[16,0,0,9,23], -"classch_1_1_object.html#a8f5df1a5ccf1f4053c67aaa98dec71e6":[16,0,0,9,18], -"classch_1_1_object.html#a92bcd99a8c7a5e565d713387bbd954d2":[16,0,0,9,25], -"classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603":[16,0,0,9,26], -"classch_1_1_object.html#aa69ff36a99fa4cffbc908584b041a2c8":[16,0,0,9,12], -"classch_1_1_object.html#ab43915289318053f138083f1e8720646":[16,0,0,9,2], -"classch_1_1_object.html#ac45068d2a56b7142f30ee43c8bc3366b":[16,0,0,9,14], -"classch_1_1_object.html#adff80080730670f56fc3fcb4cecf65a7":[16,0,0,9,0], -"classch_1_1_object.html#ae2f9e80af391e105a6b6bc27107e3c9e":[16,0,0,9,20], -"classch_1_1_object.html#ae38bc7ac84c1624c0d8145fa67ea8d85":[16,0,0,9,1], -"classch_1_1_object.html#ae3d98ea3f4b25541efc26fa563ed1ed2":[16,0,0,9,10], -"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#af3647aa91e248e08fec6aabb7422af7f":[16,0,0,9,16], -"classch_1_1_object.html#af6956eda45da72f747aeee28fadfe4fe":[16,0,0,9,24], -"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#a35828ac184b5aad339c5a0254f3b179e":[16,0,0,10,12], -"classch_1_1_observation.html#a38bcb70f9e4fe06bac1d5175247ad4e2":[16,0,0,10,9], -"classch_1_1_observation.html#a4ab5df5543cfe3ce7df385cb40e16d35":[16,0,0,10,11], -"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#a6cfe0c1aaed17a7a1784f3a0b0c4ef2c":[16,0,0,10,14], -"classch_1_1_observation.html#a6fca2ff7fd0dada3c1254a54b81617c2":[16,0,0,10,15], -"classch_1_1_observation.html#a759deffcb06bd3e3bf06c1823e244144":[16,0,0,10,10], -"classch_1_1_observation.html#a8069a2cfb78c84325ba023064930bd43":[16,0,0,10,13], -"classch_1_1_observation.html#a89be1a9e99b14efd3d528195c3f8eb88":[16,0,0,10,17], -"classch_1_1_observation.html#a987488ba4dcac7dee972febeeab0b648":[16,0,0,10,16], -"classch_1_1_observation.html#a9f88f5220628a9d923539c3fe8a0669a":[16,0,0,10,2], -"classch_1_1_observation.html#aa82898ea9469ea6e9346410bfe4b9754":[16,0,0,10,6], -"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#af37c17965ed6342871c1154df190e9cf":[16,0,0,10,3], -"classch_1_1_parameter.html":[16,0,0,11], -"classch_1_1_parameter.html#a1539eec34291394e236f4dc6d7a43279":[16,0,0,11,18], -"classch_1_1_parameter.html#a1cb6f7e522467a2090e4cc9fc86f5c25":[16,0,0,11,10], -"classch_1_1_parameter.html#a1d3374ac1270ba79c38338d9bfbd006e":[16,0,0,11,19], -"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#a3ca540760eba83fa7867bf02315ba48d":[16,0,0,11,12], -"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#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#ac3be609032d840cf477cfa3cf7982c7a":[16,0,0,11,0], -"classch_1_1_parameter.html#ac69867be1fd0c821d4382210ed6320e2":[16,0,0,11,6], -"classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff":[16,0,0,11,15], -"classch_1_1_parameter.html#ad0cf0c6b5ad729e7c991ab468bc9f8d2":[16,0,0,11,16], -"classch_1_1_parameter.html#ad1459e77cbe8a5a4814ca9b90be346fd":[16,0,0,11,3], -"classch_1_1_parameter.html#ade82fbedd8ad452e061b84f58e8ed8f8":[16,0,0,11,14], -"classch_1_1_parameter.html#ae395590d5d8f257af2068284462352ed":[16,0,0,11,8], -"classch_1_1_parameter.html#ae6cafb3e152e109ff3e3e7b829eb58fe":[16,0,0,11,4], -"classch_1_1_process.html":[16,0,0,12], -"classch_1_1_process.html#a02bffdf7ced997cc8bdd51953c357f27":[16,0,0,12,7], -"classch_1_1_process.html#a08ebc03f0519516a3e1b8f7aaa37d807":[16,0,0,12,13], -"classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20":[16,0,0,12,18], -"classch_1_1_process.html#a0fdc4f6b03943eb043b14428ddcdb5cd":[16,0,0,12,15], -"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#a3818d45b542fe058e4159fe0a30d2fba":[16,0,0,12,12], -"classch_1_1_process.html#a4683fb53999bbc1cbefb5637a4843e55":[16,0,0,12,6], -"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#a5e09f829f8bda2f3b241500fba58f985":[16,0,0,12,19], -"classch_1_1_process.html#a71a3c904169a01cb6e79d0c342643ad8":[16,0,0,12,22], -"classch_1_1_process.html#a80aedc9343ad988ca0908b21367bd3f0":[16,0,0,12,17], -"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#ab032210cfba1f6edc94218ed4a6411ed":[16,0,0,12,21], -"classch_1_1_process.html#ab648ac76032cada297b0eb54bdba471d":[16,0,0,12,3], -"classch_1_1_process.html#ac3de97aa921675b3cefe9d507c13e728":[16,0,0,12,2], -"classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa":[16,0,0,12,24], -"classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29":[16,0,0,12,23], -"classch_1_1_process.html#ad40cf460a5269fc12a96411ea8bad2f2":[16,0,0,12,10], -"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_process.html#af8d6574f338e05cdc4f4e647e9ae9d6c":[16,0,0,12,11], -"classch_1_1_systematic.html":[16,0,0,14], -"classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8":[16,0,0,14,33], -"classch_1_1_systematic.html#a14586d1bc593e9564ce15736ad8367c4":[16,0,0,14,4], -"classch_1_1_systematic.html#a15b322bf20273a650dbdaa4316eb013c":[16,0,0,14,28], -"classch_1_1_systematic.html#a1b40f502a9e5343cc1947bf452cd80d5":[16,0,0,14,10], -"classch_1_1_systematic.html#a2932a2add1e82602cfea45af6ff2f953":[16,0,0,14,24], -"classch_1_1_systematic.html#a29c3a43b54fbf4a3e00975146e028251":[16,0,0,14,18], -"classch_1_1_systematic.html#a2c91f65744afb7460bfffdf2a4987196":[16,0,0,14,8], -"classch_1_1_systematic.html#a3a32c848411fbc9ff19899670a3c9bfb":[16,0,0,14,2], -"classch_1_1_systematic.html#a3b12feb2eceaa601c4b12e0922719d97":[16,0,0,14,19], -"classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d":[16,0,0,14,29], -"classch_1_1_systematic.html#a40fb079acc7cdf7acd81d7bccb653f8a":[16,0,0,14,11], -"classch_1_1_systematic.html#a4e1cc3aec9d8ad8e8a482a07dbbc4eff":[16,0,0,14,0], -"classch_1_1_systematic.html#a5764d6db4954b8aac554776c149d3201":[16,0,0,14,16], -"classch_1_1_systematic.html#a5871a51570f061eed68fd8610f6041bc":[16,0,0,14,22], -"classch_1_1_systematic.html#a5b8ccb1b97744d1b4c2b9e5f410c4049":[16,0,0,14,5], -"classch_1_1_systematic.html#a7488a889a863e7ae1395ff80320edbd8":[16,0,0,14,27], -"classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661":[16,0,0,14,30], -"classch_1_1_systematic.html#a780d467fd100c4c521fc604ddcea6f0f":[16,0,0,14,9], -"classch_1_1_systematic.html#a8341af1252e6db54ad999f3147bed794":[16,0,0,14,17], -"classch_1_1_systematic.html#a838d5c14e2be2610010e7354eb706fae":[16,0,0,14,32], -"classch_1_1_systematic.html#a872469110fe349da45922431d6d24bc7":[16,0,0,14,6], -"classch_1_1_systematic.html#a8d1cceb924cb5709221afef970778236":[16,0,0,14,31], -"classch_1_1_systematic.html#a95c61a9b2de9df89a598c7eced3f61b3":[16,0,0,14,26], -"classch_1_1_systematic.html#aa5cd1f87ffe9aadcb41fed7bd746bdef":[16,0,0,14,25], -"classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf":[16,0,0,14,15], -"classch_1_1_systematic.html#ab3faed43e3b15b998560f271d4068182":[16,0,0,14,23], -"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#ac0438bd51a527d0b2c1a70dd303ff4c3":[16,0,0,14,12], -"classch_1_1_systematic.html#ac79c7195d56957d39a5329f856d20fe8":[16,0,0,14,20], -"classch_1_1_systematic.html#ad27b72a4bdb21f6ee93e490b98398eb3":[16,0,0,14,21], -"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#ad8e5f3d29de730a563a1462ac964d5e5":[16,0,0,14,14], -"classch_1_1_systematic.html#ae72c57591746155a32cd36adc350e92a":[16,0,0,14,34], +"classch_1_1_object.html":[16,0,0,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#a3f131c3c63a86f91cab1d2fb56c86bb9":[16,0,0,8,25], +"classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3":[16,0,0,8,19], +"classch_1_1_object.html#a740d853956df951a7cb08094e21f0332":[16,0,0,8,8], +"classch_1_1_object.html#a7997c967b45c8048e5d37284634192c8":[16,0,0,8,5], +"classch_1_1_object.html#a7b588d78c22464ebe2b793cbaa2366d3":[16,0,0,8,6], +"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#a8c779be0d578124a56a17031abd86c9f":[16,0,0,8,23], +"classch_1_1_object.html#a8f5df1a5ccf1f4053c67aaa98dec71e6":[16,0,0,8,18], +"classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603":[16,0,0,8,26], +"classch_1_1_object.html#aa69ff36a99fa4cffbc908584b041a2c8":[16,0,0,8,12], +"classch_1_1_object.html#ab43915289318053f138083f1e8720646":[16,0,0,8,2], +"classch_1_1_object.html#ac45068d2a56b7142f30ee43c8bc3366b":[16,0,0,8,14], +"classch_1_1_object.html#adff80080730670f56fc3fcb4cecf65a7":[16,0,0,8,0], +"classch_1_1_object.html#ae2f9e80af391e105a6b6bc27107e3c9e":[16,0,0,8,20], +"classch_1_1_object.html#ae38bc7ac84c1624c0d8145fa67ea8d85":[16,0,0,8,1], +"classch_1_1_object.html#ae3d98ea3f4b25541efc26fa563ed1ed2":[16,0,0,8,10], +"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#af3647aa91e248e08fec6aabb7422af7f":[16,0,0,8,16], +"classch_1_1_object.html#af6956eda45da72f747aeee28fadfe4fe":[16,0,0,8,24], +"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#a35828ac184b5aad339c5a0254f3b179e":[16,0,0,9,12], +"classch_1_1_observation.html#a38bcb70f9e4fe06bac1d5175247ad4e2":[16,0,0,9,9], +"classch_1_1_observation.html#a4ab5df5543cfe3ce7df385cb40e16d35":[16,0,0,9,11], +"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#a6cfe0c1aaed17a7a1784f3a0b0c4ef2c":[16,0,0,9,14], +"classch_1_1_observation.html#a6fca2ff7fd0dada3c1254a54b81617c2":[16,0,0,9,15], +"classch_1_1_observation.html#a759deffcb06bd3e3bf06c1823e244144":[16,0,0,9,10], +"classch_1_1_observation.html#a8069a2cfb78c84325ba023064930bd43":[16,0,0,9,13], +"classch_1_1_observation.html#a89be1a9e99b14efd3d528195c3f8eb88":[16,0,0,9,17], +"classch_1_1_observation.html#a987488ba4dcac7dee972febeeab0b648":[16,0,0,9,16], +"classch_1_1_observation.html#a9f88f5220628a9d923539c3fe8a0669a":[16,0,0,9,2], +"classch_1_1_observation.html#aa82898ea9469ea6e9346410bfe4b9754":[16,0,0,9,6], +"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#af37c17965ed6342871c1154df190e9cf":[16,0,0,9,3], +"classch_1_1_parameter.html":[16,0,0,10], +"classch_1_1_parameter.html#a1539eec34291394e236f4dc6d7a43279":[16,0,0,10,18], +"classch_1_1_parameter.html#a1cb6f7e522467a2090e4cc9fc86f5c25":[16,0,0,10,10], +"classch_1_1_parameter.html#a1d3374ac1270ba79c38338d9bfbd006e":[16,0,0,10,19], +"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#a3ca540760eba83fa7867bf02315ba48d":[16,0,0,10,12], +"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#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#ac3be609032d840cf477cfa3cf7982c7a":[16,0,0,10,0], +"classch_1_1_parameter.html#ac69867be1fd0c821d4382210ed6320e2":[16,0,0,10,6], +"classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff":[16,0,0,10,15], +"classch_1_1_parameter.html#ad0cf0c6b5ad729e7c991ab468bc9f8d2":[16,0,0,10,16], +"classch_1_1_parameter.html#ad1459e77cbe8a5a4814ca9b90be346fd":[16,0,0,10,3], +"classch_1_1_parameter.html#ade82fbedd8ad452e061b84f58e8ed8f8":[16,0,0,10,14], +"classch_1_1_parameter.html#ae395590d5d8f257af2068284462352ed":[16,0,0,10,8], +"classch_1_1_parameter.html#ae6cafb3e152e109ff3e3e7b829eb58fe":[16,0,0,10,4], +"classch_1_1_process.html":[16,0,0,11], +"classch_1_1_process.html#a02bffdf7ced997cc8bdd51953c357f27":[16,0,0,11,7], +"classch_1_1_process.html#a08ebc03f0519516a3e1b8f7aaa37d807":[16,0,0,11,13], +"classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20":[16,0,0,11,18], +"classch_1_1_process.html#a0fdc4f6b03943eb043b14428ddcdb5cd":[16,0,0,11,15], +"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#a3818d45b542fe058e4159fe0a30d2fba":[16,0,0,11,12], +"classch_1_1_process.html#a4683fb53999bbc1cbefb5637a4843e55":[16,0,0,11,6], +"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#a5e09f829f8bda2f3b241500fba58f985":[16,0,0,11,19], +"classch_1_1_process.html#a71a3c904169a01cb6e79d0c342643ad8":[16,0,0,11,22], +"classch_1_1_process.html#a80aedc9343ad988ca0908b21367bd3f0":[16,0,0,11,17], +"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#ab032210cfba1f6edc94218ed4a6411ed":[16,0,0,11,21], +"classch_1_1_process.html#ab648ac76032cada297b0eb54bdba471d":[16,0,0,11,3], +"classch_1_1_process.html#ac3de97aa921675b3cefe9d507c13e728":[16,0,0,11,2], +"classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa":[16,0,0,11,24], +"classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29":[16,0,0,11,23], +"classch_1_1_process.html#ad40cf460a5269fc12a96411ea8bad2f2":[16,0,0,11,10], +"classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae":[16,0,0,11,14], +"classch_1_1_process.html#ae59eb8e73740459d47205a32d23b517a":[16,0,0,11,4], +"classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f":[16,0,0,11,20], +"classch_1_1_process.html#af8d6574f338e05cdc4f4e647e9ae9d6c":[16,0,0,11,11], +"classch_1_1_systematic.html":[16,0,0,13], +"classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8":[16,0,0,13,35], +"classch_1_1_systematic.html#a0c0e9adce37196093c5bc303f78f4d08":[16,0,0,13,31], +"classch_1_1_systematic.html#a14586d1bc593e9564ce15736ad8367c4":[16,0,0,13,4], +"classch_1_1_systematic.html#a15b322bf20273a650dbdaa4316eb013c":[16,0,0,13,28], +"classch_1_1_systematic.html#a1b40f502a9e5343cc1947bf452cd80d5":[16,0,0,13,10], +"classch_1_1_systematic.html#a2932a2add1e82602cfea45af6ff2f953":[16,0,0,13,24], +"classch_1_1_systematic.html#a29c3a43b54fbf4a3e00975146e028251":[16,0,0,13,18], +"classch_1_1_systematic.html#a2c91f65744afb7460bfffdf2a4987196":[16,0,0,13,8], +"classch_1_1_systematic.html#a3a32c848411fbc9ff19899670a3c9bfb":[16,0,0,13,2], +"classch_1_1_systematic.html#a3b12feb2eceaa601c4b12e0922719d97":[16,0,0,13,19], +"classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d":[16,0,0,13,29], +"classch_1_1_systematic.html#a40fb079acc7cdf7acd81d7bccb653f8a":[16,0,0,13,11], +"classch_1_1_systematic.html#a4e1cc3aec9d8ad8e8a482a07dbbc4eff":[16,0,0,13,0], +"classch_1_1_systematic.html#a5764d6db4954b8aac554776c149d3201":[16,0,0,13,16], +"classch_1_1_systematic.html#a5871a51570f061eed68fd8610f6041bc":[16,0,0,13,22], +"classch_1_1_systematic.html#a5b8ccb1b97744d1b4c2b9e5f410c4049":[16,0,0,13,5], +"classch_1_1_systematic.html#a7488a889a863e7ae1395ff80320edbd8":[16,0,0,13,27], +"classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661":[16,0,0,13,30], +"classch_1_1_systematic.html#a780d467fd100c4c521fc604ddcea6f0f":[16,0,0,13,9], +"classch_1_1_systematic.html#a8341af1252e6db54ad999f3147bed794":[16,0,0,13,17], +"classch_1_1_systematic.html#a838d5c14e2be2610010e7354eb706fae":[16,0,0,13,34], +"classch_1_1_systematic.html#a872469110fe349da45922431d6d24bc7":[16,0,0,13,6], +"classch_1_1_systematic.html#a8d1cceb924cb5709221afef970778236":[16,0,0,13,33], +"classch_1_1_systematic.html#a95c61a9b2de9df89a598c7eced3f61b3":[16,0,0,13,26], +"classch_1_1_systematic.html#a995bc6ca55d509c76ba92322631e730b":[16,0,0,13,32], +"classch_1_1_systematic.html#aa5cd1f87ffe9aadcb41fed7bd746bdef":[16,0,0,13,25], +"classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf":[16,0,0,13,15], +"classch_1_1_systematic.html#ab3faed43e3b15b998560f271d4068182":[16,0,0,13,23], +"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#ac0438bd51a527d0b2c1a70dd303ff4c3":[16,0,0,13,12], +"classch_1_1_systematic.html#ac79c7195d56957d39a5329f856d20fe8":[16,0,0,13,20], +"classch_1_1_systematic.html#ad27b72a4bdb21f6ee93e490b98398eb3":[16,0,0,13,21], +"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#ad8e5f3d29de730a563a1462ac964d5e5":[16,0,0,13,14], +"classch_1_1_systematic.html#ae72c57591746155a32cd36adc350e92a":[16,0,0,13,36], "classch_1_1syst_1_1_syst_map.html":[16,0,0,0,7], "classch_1_1syst_1_1_syst_map.html#a11bb44a14b6ca6d3da7a9d3a83ca00f0":[16,0,0,0,7,7], "classch_1_1syst_1_1_syst_map.html#a164b50fafa77c9f471fca8abeec7aba2":[16,0,0,0,7,8], @@ -205,8 +208,8 @@ var NAVTREEINDEX2 = "classch_1_1syst_1_1_syst_map_func.html#a7af1c3f39dacbbf5df37da61185a9f55":[16,0,0,0,9,8], "classch_1_1syst_1_1_syst_map_func.html#a9942c61e232bc13fb72c2cdc68ae56eb":[16,0,0,0,9,7], "classch_1_1syst_1_1_syst_map_func.html#aaf1800cf62304ece89a1217c53ab7e5c":[16,0,0,0,9,6], -"classch_1_1syst_1_1bin__id.html":[16,0,0,0,2], -"classch_1_1syst_1_1bin__id.html#a6e658f07679ce2104ccd1944118dc734":[16,0,0,0,2,0], +"classch_1_1syst_1_1bin__id.html":[16,0,0,0,6], +"classch_1_1syst_1_1bin__id.html#a6e658f07679ce2104ccd1944118dc734":[16,0,0,0,6,0], "deprecated.html":[14], "dir_0a870e65c9e7f54fc0acb33d59ad08b1.html":[17,0,0], "dir_49e56c817e5e54854c35e136979f97ca.html":[17,0,2], @@ -218,15 +221,15 @@ var NAVTREEINDEX2 = "dir_b40e54ab5ece44508715b2777a1a95eb.html":[17,0,1,0], "dir_bd86b6048931602d3e119f261829765b.html":[17,0,1,2], "files.html":[17,0], -"functions.html":[16,2,0,0], "functions.html":[16,2,0], +"functions.html":[16,2,0,0], "functions_b.html":[16,2,0,1], "functions_c.html":[16,2,0,2], "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], @@ -246,8 +249,5 @@ var NAVTREEINDEX2 = "functions_func_v.html":[16,2,1,17], "functions_func_w.html":[16,2,1,18], "functions_func_z.html":[16,2,1,19], -"functions_func_~.html":[16,2,1,20], -"functions_g.html":[16,2,0,6], -"functions_h.html":[16,2,0,7], -"functions_i.html":[16,2,0,8] +"functions_func_~.html":[16,2,1,20] }; diff --git a/navtreeindex3.js b/navtreeindex3.js index 9c16da0cf92..9efd28cb366 100644 --- a/navtreeindex3.js +++ b/navtreeindex3.js @@ -1,5 +1,8 @@ var NAVTREEINDEX3 = { +"functions_g.html":[16,2,0,6], +"functions_h.html":[16,2,0,7], +"functions_i.html":[16,2,0,8], "functions_l.html":[16,2,0,9], "functions_m.html":[16,2,0,10], "functions_n.html":[16,2,0,11], @@ -21,8 +24,8 @@ var NAVTREEINDEX3 = "globals_defs.html":[17,1,2], "globals_func.html":[17,1,1], "hierarchy.html":[16,1], -"index.html":[], "index.html":[0], +"index.html":[], "index.html#getting-started":[0,0], "index.html#high-level-tools":[0,1], "index.html#note":[0,2], @@ -66,103 +69,128 @@ var NAVTREEINDEX3 = "md_docs__charged_higgs.html#autotoc_md4":[9,2], "md_docs__hybrid_new_grid.html":[13], "namespacech.html":[15,0,0], -"namespacech.html":[16,0,0], -"namespacech_1_1syst.html":[16,0,0,0], +"namespacech.html#a011bcc8eb52bfa118fd44ade245e9e45":[15,0,0,121], +"namespacech.html#a06e7ae02d1abed286e7184a7e7626529":[15,0,0,65], +"namespacech.html#a082a87dbfd5b9d61198f7fd4b68e70f9":[15,0,0,58], +"namespacech.html#a0d7482a8b0989a1b6b7fe1689c65b0e1":[15,0,0,37], +"namespacech.html#a0ea5d53cb275e53807f576a4020cf15e":[15,0,0,74], +"namespacech.html#a0f62630d67d75c1b6143c0519da2a720":[15,0,0,30], +"namespacech.html#a110f24bc749763a04ea6c9fbd909fde8":[15,0,0,106], +"namespacech.html#a1347e48be022e182e17dfc421bf12680":[15,0,0,80], +"namespacech.html#a1734a00def15ba2ee51c28197176548e":[15,0,0,105], +"namespacech.html#a17c9ada5f6dff7d80556d45f6fc15711":[15,0,0,98], +"namespacech.html#a1a29f03f52660fd3a9fce0c353e3eee5":[15,0,0,72], +"namespacech.html#a1d79b15a838a8871759a19ab4efdf07f":[15,0,0,59], +"namespacech.html#a21ce0ae95c56bde7e1ecc1f21a839d2d":[15,0,0,123], +"namespacech.html#a2306f36ca615557c6e40a542eeac706c":[15,0,0,41], +"namespacech.html#a23a4079d5c68e21d9697570255e08224":[15,0,0,84], +"namespacech.html#a23cd9444931a49de080638458f722501":[15,0,0,82], +"namespacech.html#a25bd105268bf5e23e7c895329938aa0e":[15,0,0,27], +"namespacech.html#a2718097dd3af197ac2ad9d728b70ddde":[15,0,0,38], +"namespacech.html#a27eee114b589ec9869ea3d34863e41fe":[15,0,0,29], +"namespacech.html#a281b148e8871f50f2c3269ab91b1a837":[15,0,0,23], +"namespacech.html#a2cbcfd049543bfe9f63958bc671deeae":[15,0,0,81], +"namespacech.html#a2e35146227543a2245a91020259faaa8":[15,0,0,112], +"namespacech.html#a2e81a1feb11ba3255909526f90bbe7da":[15,0,0,93], +"namespacech.html#a2f4db67e7b9039935a58ea60b650041a":[15,0,0,91], +"namespacech.html#a2fac772d6886087f8f4f77a711369ec9":[15,0,0,104], +"namespacech.html#a30449f890154e9002086dbfacc74d85c":[15,0,0,26], +"namespacech.html#a35c9af4e2f53f4686e4c4bbba535eb35":[15,0,0,63], +"namespacech.html#a36b4ff13e4987621615e47bd1c026993":[15,0,0,99], +"namespacech.html#a39e16e4393f4f945edfa540c3751cae8":[15,0,0,52], +"namespacech.html#a3ea8e5201690fc0aca17b034fa3ba527":[15,0,0,102], +"namespacech.html#a40560251a7c7ee58a41bd890f1963175":[15,0,0,109], +"namespacech.html#a433334f3da17eb2886510a97df0d2ef4":[15,0,0,119], +"namespacech.html#a44b242b58441307bf5c7f0dbfbafe865":[15,0,0,113], +"namespacech.html#a49fb1eb0d277893e0f6a9cc099d4cf28":[15,0,0,69], +"namespacech.html#a4d79c4fca0a76cc62c91d580644c051c":[15,0,0,33], +"namespacech.html#a52e06fe8e122355225a7c485d88c22ff":[15,0,0,55], +"namespacech.html#a53918f33e1cc50065abd25be2b64539a":[15,0,0,111], +"namespacech.html#a53e0814284e64a6c0aa54c3a130c0a88":[15,0,0,53], +"namespacech.html#a5874d67ae782c76e78e6b9afcadbe784":[15,0,0,118], +"namespacech.html#a5903f0de2f0d18871f4dab7430d04830":[15,0,0,56], +"namespacech.html#a597c0a29e463a96eb05f9df8cb9dfe90":[15,0,0,36], +"namespacech.html#a5a4aae941cd175bf6764ad6789b4df8c":[15,0,0,62], +"namespacech.html#a5ae8a88e9e0d2120deec06e553a525f6":[15,0,0,60], +"namespacech.html#a5e05f5018289301287533bc288e576bb":[15,0,0,45], +"namespacech.html#a5e23234ab65cfa48c99b83d94e291125":[15,0,0,79], +"namespacech.html#a66828130e239590bca8112c89d68b653":[15,0,0,22], +"namespacech.html#a675f0b80d66b8a9b3948231c94a20fba":[15,0,0,117], +"namespacech.html#a6c065d2d25d44e2ca91d56cf6f97964f":[15,0,0,77], +"namespacech.html#a7369fb27dd88881fe886abb67447cbc0":[15,0,0,96], +"namespacech.html#a7778c42ab19640ea360293c20bfa24f5":[15,0,0,21], +"namespacech.html#a7825c01633c16c8c5d7c46f78acf6d4c":[15,0,0,88], +"namespacech.html#a7bf80bed7d84e3c82934fa939dc6e1e3":[15,0,0,50], +"namespacech.html#a7d0976239046f20281fb0bd2bd2c3625":[15,0,0,20], +"namespacech.html#a7f9b08fd76f4940d92768574abe5df73":[15,0,0,49], +"namespacech.html#a8240c3e729fa2ebaaaf1082ce6a15dd5":[15,0,0,90], +"namespacech.html#a847fd9dc77ba21e35a6b531e1d26902a":[15,0,0,76], +"namespacech.html#a86955210d56802afd6080eda66bd4fa6":[15,0,0,101], +"namespacech.html#a879dedf45db74da348f2571492a280d2":[15,0,0,107], +"namespacech.html#a8a22853e782855a8d9c00d074a8749dc":[15,0,0,116], +"namespacech.html#a8a3f27453e5ff2a690defd0e9af30ba1":[15,0,0,97], +"namespacech.html#a8b80f6510601d33e773f90b1160d5463":[15,0,0,115], +"namespacech.html#a8c2dcef8ee437178ff45671478c475c0":[15,0,0,95], +"namespacech.html#a961ef6b98124198d1648868011bc0153":[15,0,0,19], +"namespacech.html#a98935d065d3339aebddc63328e2233ba":[15,0,0,108], +"namespacech.html#a98ec286981dda179332f736f113ab8a5":[15,0,0,83], +"namespacech.html#a99d1b22dfcd46bfde6a31a7a5765cd2b":[15,0,0,71], +"namespacech.html#a9aa7fae276e9a3482b0e2e0b7adf779b":[15,0,0,86], +"namespacech.html#a9ae81b01c3e51356f05c2734d4e7fd8d":[15,0,0,18], +"namespacech.html#a9ba092c0c88fd0a122b927b83d91a4de":[15,0,0,70], +"namespacech.html#a9c09b4e5a6dbbd49dfebd9235a2f60b5":[15,0,0,73], +"namespacech.html#a9ce1f37a56b1499707629dc77b9f7853":[15,0,0,16], +"namespacech.html#a9db822b84dd7cf9f1d3bc76a6a741498":[15,0,0,64], +"namespacech.html#a9e0d877cb39147fa1de5cdcb8eff2110":[15,0,0,17], +"namespacech.html#aa859d4d87eb7f27b2499e55c73789d98":[15,0,0,66], +"namespacech.html#aa86c0751d41d0c533f51fe249468872a":[15,0,0,103], +"namespacech.html#aa94f943eeda46d951fd794b7532944ed":[15,0,0,35], +"namespacech.html#aa97b500b98aeaa86756eb1c5395a866e":[15,0,0,15], +"namespacech.html#aa9eced43e8f467639564c24f2203f818":[15,0,0,28], +"namespacech.html#aab5d6bfe23a9535399ea8ab48a3f223a":[15,0,0,94], +"namespacech.html#aac947603f4cc50f70e7a8765da3e13d1":[15,0,0,31], +"namespacech.html#aad11ca6f4dfe946a28a052117116ee04":[15,0,0,114], +"namespacech.html#aaec3acecfcee89ac9d4dfe9d0c20827c":[15,0,0,92], +"namespacech.html#aafb5cab1f237067be3553e893ca0a7b9":[15,0,0,87], +"namespacech.html#ab0a522713ffa93da18cb26132f875344":[15,0,0,25], +"namespacech.html#abfd9e94a6fd4c33abe1bbd5fb03e7f28":[15,0,0,78], +"namespacech.html#ac1578f3e0a1da427e6750ba4cefd94b8":[15,0,0,34], +"namespacech.html#aca0068af8fbaa611e502aa5647ed2121":[15,0,0,44], +"namespacech.html#aca65f362f9126cb2b200fff5356a9d59":[15,0,0,100], +"namespacech.html#acc4147799e297d63fa1a9ca08559a111":[15,0,0,43], +"namespacech.html#acde782eef7132d07c095b4468de17dff":[15,0,0,85], +"namespacech.html#acec5cdd79f370c7bee88f4de418c9423":[15,0,0,40], +"namespacech.html#acfd60821a2deee24955d3a98e6605fd0":[15,0,0,110], +"namespacech.html#ad7c22b70d392f9617ee6f1c27a622661":[15,0,0,47], +"namespacech.html#ad95e5447b9cb0676428f86b1fd018a97":[15,0,0,89], +"namespacech.html#adab895bcbcec0006d4def02d2e909206":[15,0,0,46], +"namespacech.html#add9281b32e8ff7ec2d8fd6de545b3b4f":[15,0,0,48], +"namespacech.html#ae6eebbd180b87701e7724c3db9d6cd5a":[15,0,0,39], +"namespacech.html#aec2e836e1039ccd11ac13a201627c5c8":[15,0,0,54], +"namespacech.html#aef408f71dec36c69cd2e145505212c49":[15,0,0,68], +"namespacech.html#aefdcaba918224f404af9fcd9b53fa7bb":[15,0,0,122], +"namespacech.html#af29ced9cc4bb7590f89223df727d1706":[15,0,0,42], +"namespacech.html#af6162c2c3534475d55453bbdb86b13a4":[15,0,0,51], +"namespacech.html#af7bcceb32c2f4a82fe1de32a93d0dfa3":[15,0,0,61], +"namespacech.html#af7fe148f865bc9674341c9aa36d875ef":[15,0,0,67], +"namespacech.html#af86af10e2226a6deb97ad890c1ac9f0b":[15,0,0,24], +"namespacech.html#af9aa1e238306d161656d15f0bf4fb8d4":[15,0,0,75], +"namespacech.html#af9b462e52384bf17acf24c57bee7a5d3":[15,0,0,120], +"namespacech.html#afdabce9fcf0e565dcd93d273e771ef68":[15,0,0,57], +"namespacech.html#afe8f3907b055d2d6c0bc8b2bb7f74a02":[15,0,0,32], "namespacech_1_1syst.html":[15,0,0,0], "namespacech_1_1syst_1_1detail.html":[15,0,0,0,0], +"namespacech_1_1syst_1_1detail.html#a3bf4d0fb6e19a9de3255b6741b5274d7":[15,0,0,0,0,1], +"namespacech_1_1syst_1_1detail.html#a54c49b65dbe6b3a81b35285e8bf6e301":[15,0,0,0,0,0], +"namespacech_1_1syst_1_1detail.html#a67a602daf8c00931aea63667430d94a8":[15,0,0,0,0,2], "namespacech_1_1tupleprint.html":[15,0,0,1], -"namespacech_1_1tupleprint.html":[16,0,0,1], "namespacemembers.html":[15,1,0], "namespacemembers_func.html":[15,1,1], -"namespacemembers_type.html":[15,1,3], -"namespacemembers_vars.html":[15,1,2], -"namespacepython.html":[15,0,1], -"namespacepython.html":[16,0,1], -"namespacepython_1_1plotting.html":[15,0,1,0], +"namespacemembers_type.html":[15,1,2], +"namespaceplotting.html":[15,0,1], "namespaces.html":[15,0], "pages.html":[], "plotting_8py.html":[17,0,1,2,0], -"plotting_8py.html#a063d0ef08d16c34e8b7f56ba484d202d":[17,0,1,2,0,77], -"plotting_8py.html#a06656a23374162431db40f47baea5f76":[17,0,1,2,0,16], -"plotting_8py.html#a0c281eca93efb5bae6b14237ca2c1c36":[17,0,1,2,0,34], -"plotting_8py.html#a0c4fbbe51debf6af728af019e9a0a031":[17,0,1,2,0,36], -"plotting_8py.html#a0e1f1088e52d9a278b2e0dc1af4512ba":[17,0,1,2,0,14], -"plotting_8py.html#a0f8d9d2d1e51e599d676fc0758083bf2":[17,0,1,2,0,38], -"plotting_8py.html#a150525eee69b8e2727690887a7bd4996":[17,0,1,2,0,20], -"plotting_8py.html#a156ac4a82a5eb80648008c9abadbd9c0":[17,0,1,2,0,69], -"plotting_8py.html#a1958833c592d44945a72957e87089cbf":[17,0,1,2,0,66], -"plotting_8py.html#a1adc45cdaed9e220983039a80fbe86cb":[17,0,1,2,0,57], -"plotting_8py.html#a1b60082b4561b4b3af03a5916080162b":[17,0,1,2,0,37], -"plotting_8py.html#a1f64290754cdff288cedd257f2e2a1c2":[17,0,1,2,0,78], -"plotting_8py.html#a206835e129a1cec888da0a48e8762bd9":[17,0,1,2,0,49], -"plotting_8py.html#a295d9454418dea7b25a66b3b0e1cbb91":[17,0,1,2,0,48], -"plotting_8py.html#a299b2acd01d8e1d8d646a72164323fca":[17,0,1,2,0,24], -"plotting_8py.html#a2c4bc7ae087717eb744bacdb14207e63":[17,0,1,2,0,70], -"plotting_8py.html#a2cdb3efbda1fb72cb528658c8be0e0a2":[17,0,1,2,0,47], -"plotting_8py.html#a2f37093b1828f3553adf6c59e9a86aa4":[17,0,1,2,0,62], -"plotting_8py.html#a3730216ae300da42b4a0e1b28baad343":[17,0,1,2,0,68], -"plotting_8py.html#a39c399a361eec985033409a45e7e74b9":[17,0,1,2,0,22], -"plotting_8py.html#a39e68474eaae8c5c0529d96e25aa698d":[17,0,1,2,0,74], -"plotting_8py.html#a3e72f7cb7088669f044870a43cd191fc":[17,0,1,2,0,11], -"plotting_8py.html#a3f697f7a987d5b37c585a4dd0b3674ea":[17,0,1,2,0,55], -"plotting_8py.html#a41521655e488b97e5e50289fec090fd6":[17,0,1,2,0,43], -"plotting_8py.html#a42ec9d87c1a106fa4bb6707a6b490846":[17,0,1,2,0,8], -"plotting_8py.html#a42fdb746289c7f95685cbc0182f140e1":[17,0,1,2,0,65], -"plotting_8py.html#a504cc85d525735f2042e0f72b6e04ef7":[17,0,1,2,0,61], -"plotting_8py.html#a51c8979fbd3c58c8ea17353e410a6718":[17,0,1,2,0,75], -"plotting_8py.html#a522b5996aee3a56cab95f8a94c0d2009":[17,0,1,2,0,46], -"plotting_8py.html#a564405ccf77ddbeb4f873925fa514e70":[17,0,1,2,0,23], -"plotting_8py.html#a57beab29bf647837ac4f0460335ee03d":[17,0,1,2,0,26], -"plotting_8py.html#a59730ba620dbb43bb688ab10f2479757":[17,0,1,2,0,73], -"plotting_8py.html#a5d17f0ddd4eb0e15dc97958d25323f1c":[17,0,1,2,0,32], -"plotting_8py.html#a62481c509fe69ac9d6d61aa69b17dc8e":[17,0,1,2,0,5], -"plotting_8py.html#a62d4ff5f662142eb7f035c9d6a23499c":[17,0,1,2,0,27], -"plotting_8py.html#a64ee6bffa0941169d495863f3294c9a4":[17,0,1,2,0,19], -"plotting_8py.html#a66b09224086d976e544a83b86c55df30":[17,0,1,2,0,54], -"plotting_8py.html#a6a1dcbff61edbcd15e68682f3e8836dc":[17,0,1,2,0,21], -"plotting_8py.html#a7711053e47e60c813e7a3f0855ed6159":[17,0,1,2,0,3], -"plotting_8py.html#a774df4e4f7e5c1888a96ed042edd36b2":[17,0,1,2,0,12], -"plotting_8py.html#a7f7ff82b2cb2e897aa848dd097228507":[17,0,1,2,0,44], -"plotting_8py.html#a82a5f62f79fe15d0c9b2b42d8ce61b7a":[17,0,1,2,0,28], -"plotting_8py.html#a8730baf6077fb5e655003a7fdb93d8f5":[17,0,1,2,0,17], -"plotting_8py.html#a92d225e6a19a9705204d6137ed884e66":[17,0,1,2,0,60], -"plotting_8py.html#a966f8767c6188136aa2e16967b776931":[17,0,1,2,0,18], -"plotting_8py.html#a96d0e09c5c4ee59bd3e1c00050a3ac68":[17,0,1,2,0,1], -"plotting_8py.html#a985823947a10fe741fd66736aff50b7e":[17,0,1,2,0,0], -"plotting_8py.html#a9dd11f8a47a545cac3a5e35ccac70075":[17,0,1,2,0,80], -"plotting_8py.html#a9f3dc03b8c2f1b166a56c528e0713e8e":[17,0,1,2,0,30], -"plotting_8py.html#aa29285177084b6ed15e8f622f83ab4fa":[17,0,1,2,0,31], -"plotting_8py.html#aa59088e7ab459b7d23bbc043dc6be97a":[17,0,1,2,0,64], -"plotting_8py.html#aac0d06e709f0d32c009900f9a3fbed1e":[17,0,1,2,0,41], -"plotting_8py.html#aae4d4cf46e04b00b9a336be508218b17":[17,0,1,2,0,4], -"plotting_8py.html#aaebc129aabfb0bceabb1759a251cf1c5":[17,0,1,2,0,29], -"plotting_8py.html#aaecde5040c409a79db0a7cc3d5a5007f":[17,0,1,2,0,53], -"plotting_8py.html#ab38cd8888aa183c4f351925cd6d49478":[17,0,1,2,0,40], -"plotting_8py.html#aba63da9138777e72b3516e1a76bd54af":[17,0,1,2,0,10], -"plotting_8py.html#abdd045f87fa96a1274213a85208e8a45":[17,0,1,2,0,45], -"plotting_8py.html#ac3c06e73bd892e15ea8fc2428d6cef8e":[17,0,1,2,0,76], -"plotting_8py.html#ac6210cfafae6f9dd8b7ec9d30f3b8275":[17,0,1,2,0,13], -"plotting_8py.html#ac86dc839c396ece76049116769cce181":[17,0,1,2,0,15], -"plotting_8py.html#ac888e7dc2299e1562bb4e10d3e5e909a":[17,0,1,2,0,25], -"plotting_8py.html#ad36eb972250a37d6faac15d84d764af6":[17,0,1,2,0,51], -"plotting_8py.html#ad7f839ac00738ce41f8503ac96e671cd":[17,0,1,2,0,63], -"plotting_8py.html#ad901fa38f1b30a0c9a2bc3759a6030af":[17,0,1,2,0,72], -"plotting_8py.html#adc51ad4d5572e045e882a1cd12a22ce6":[17,0,1,2,0,58], -"plotting_8py.html#adeba935104d42e1b1991046ddf8573e8":[17,0,1,2,0,33], -"plotting_8py.html#adff090f8dc97c979fc8056e0844669c4":[17,0,1,2,0,42], -"plotting_8py.html#ae40b4249dbf36e8a3815ee51853332d7":[17,0,1,2,0,79], -"plotting_8py.html#ae5bed13c05b2ee4a3b3eb9ea966c7f23":[17,0,1,2,0,9], -"plotting_8py.html#ae8b7215feda9add6dfa50619eb441857":[17,0,1,2,0,67], -"plotting_8py.html#ae99dbced2e99bc514bdfa5f57f51ba81":[17,0,1,2,0,56], -"plotting_8py.html#aecb90c5d800c694865a52c8cbe023b63":[17,0,1,2,0,59], -"plotting_8py.html#aed426fb163d0ac1a6bd8fed66acd6178":[17,0,1,2,0,35], -"plotting_8py.html#aedf242792ebe14a722fed350f225d53c":[17,0,1,2,0,7], -"plotting_8py.html#aee54f1dc361284346c88192e1a060aad":[17,0,1,2,0,50], -"plotting_8py.html#af2b0eeb9509ca109461453598cd3aae8":[17,0,1,2,0,71], -"plotting_8py.html#af48f1beff13dca9995aca96ecac48f27":[17,0,1,2,0,2], -"plotting_8py.html#af7c1d446d7f6d584150ffa60c7b2bd77":[17,0,1,2,0,52], -"plotting_8py.html#afa5ad39d3467939dbf1252650e62c0e8":[17,0,1,2,0,6], -"plotting_8py.html#aff48ab1136cac75e4af3b66cc055f030":[17,0,1,2,0,39], "plotting_8py_source.html":[17,0,1,2,0], "post-fit-shapes-ws.html":[5], "python-interface.html":[4], @@ -179,55 +207,47 @@ var NAVTREEINDEX3 = "python-interface.html#py-log-print":[4,1], "python-interface.html#py-modifications":[4,5], "python-interface.html#py-sets":[4,4], -"struct_bkg_info.html":[16,0,2], -"struct_bkg_info.html#a0ea51e03c4a8105333b7272e8532861c":[16,0,2,0], -"struct_bkg_info.html#a2550b7e9b4c739ee582288e1e1b493b2":[16,0,2,1], -"struct_bkg_info.html#ae3185634cdea6c4c5d468767a4c41292":[16,0,2,2], -"struct_col_info.html":[16,0,3], -"struct_col_info.html#a093fee09d59006ef45bd76ff503e931e":[16,0,3,1], -"struct_col_info.html#a218c046b7cd01eff65b5adcdb39169c5":[16,0,3,3], -"struct_col_info.html#a89d79108973a299d202a3c3029aacaf6":[16,0,3,4], -"struct_col_info.html#ac7f91521ac9e960f88219cbf4e3d4bbc":[16,0,3,2], -"struct_col_info.html#ae8b8720618660a433e3965c626a00580":[16,0,3,0], -"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#a0a2ddf13b993ee9059918ce288b93bd8":[16,0,0,8,8], -"structch_1_1_hist_mapping.html#a13159d261f11d033b6281333d9e81377":[16,0,0,8,0], -"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#a4fcefaafa55fe7973892bccd732e25b3":[16,0,0,8,7], -"structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310":[16,0,0,8,12], -"structch_1_1_hist_mapping.html#a6568c0e7ed30fff12207aabd4ddce5d2":[16,0,0,8,4], -"structch_1_1_hist_mapping.html#a7805e6cd58e35394a0c867fa11a0b335":[16,0,0,8,6], -"structch_1_1_hist_mapping.html#a963916cdc08c796c0146d2ec63746d9f":[16,0,0,8,1], -"structch_1_1_hist_mapping.html#a96625017130b3da2cfe0a6afdb0e76a1":[16,0,0,8,2], -"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#ac7903050d3b4015018857d32f6e9f94c":[16,0,0,8,3], -"structch_1_1_hist_mapping.html#ad83659fc57397fca2243f3ad26eb44a7":[16,0,0,8,15], -"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_hist_mapping.html#af30077263ea939755c0f6c5e57acf452":[16,0,0,8,5], -"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], -"structch_1_1syst_1_1bin.html#a49d56f888416be832718d0ca180c0f5e":[16,0,0,0,1,0], +"struct_bkg_info.html":[16,0,1], +"struct_bkg_info.html#a0ea51e03c4a8105333b7272e8532861c":[16,0,1,0], +"struct_bkg_info.html#a2550b7e9b4c739ee582288e1e1b493b2":[16,0,1,1], +"struct_bkg_info.html#ae3185634cdea6c4c5d468767a4c41292":[16,0,1,2], +"struct_col_info.html":[16,0,2], +"struct_col_info.html#a093fee09d59006ef45bd76ff503e931e":[16,0,2,1], +"struct_col_info.html#a218c046b7cd01eff65b5adcdb39169c5":[16,0,2,3], +"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,6], +"structch_1_1_hist_mapping.html#a082b489ab66940ac856997bfcd1ced7a":[16,0,0,6,9], +"structch_1_1_hist_mapping.html#a0a2ddf13b993ee9059918ce288b93bd8":[16,0,0,6,8], +"structch_1_1_hist_mapping.html#a13159d261f11d033b6281333d9e81377":[16,0,0,6,0], +"structch_1_1_hist_mapping.html#a3a7318d36a94d5902b6da6382051efd8":[16,0,0,6,14], +"structch_1_1_hist_mapping.html#a3f5bb3146facf941b757e6af4c0ac857":[16,0,0,6,11], +"structch_1_1_hist_mapping.html#a4fcefaafa55fe7973892bccd732e25b3":[16,0,0,6,7], +"structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310":[16,0,0,6,12], +"structch_1_1_hist_mapping.html#a6568c0e7ed30fff12207aabd4ddce5d2":[16,0,0,6,4], +"structch_1_1_hist_mapping.html#a7805e6cd58e35394a0c867fa11a0b335":[16,0,0,6,6], +"structch_1_1_hist_mapping.html#a963916cdc08c796c0146d2ec63746d9f":[16,0,0,6,1], +"structch_1_1_hist_mapping.html#a96625017130b3da2cfe0a6afdb0e76a1":[16,0,0,6,2], +"structch_1_1_hist_mapping.html#aa63cc6db2afbb37ee7559452b7966816":[16,0,0,6,10], +"structch_1_1_hist_mapping.html#ab8e25efafca82f1152d94819130157d2":[16,0,0,6,13], +"structch_1_1_hist_mapping.html#ac7903050d3b4015018857d32f6e9f94c":[16,0,0,6,3], +"structch_1_1_hist_mapping.html#ad83659fc57397fca2243f3ad26eb44a7":[16,0,0,6,15], +"structch_1_1_hist_mapping.html#addf039e15f8e0331e04e90f7d05b7122":[16,0,0,6,16], +"structch_1_1_hist_mapping.html#ae18110c613c02c72501d599f71e26dfb":[16,0,0,6,17], +"structch_1_1_hist_mapping.html#af30077263ea939755c0f6c5e57acf452":[16,0,0,6,5], +"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_1syst_1_1analysis.html":[16,0,0,0,1], +"structch_1_1syst_1_1analysis.html#a11b01686f41ab63649080f7bc4aa9aaa":[16,0,0,0,1,0], +"structch_1_1syst_1_1bin.html":[16,0,0,0,0], +"structch_1_1syst_1_1bin.html#a49d56f888416be832718d0ca180c0f5e":[16,0,0,0,0,0], "structch_1_1syst_1_1channel.html":[16,0,0,0,3], "structch_1_1syst_1_1channel.html#a7d239a5cff7e76f49e2b64b31346d094":[16,0,0,0,3,0], -"structch_1_1syst_1_1era.html":[16,0,0,0,4], -"structch_1_1syst_1_1era.html#a3efbe3d6162bf81819ebc883e6c6ffda":[16,0,0,0,4,0], -"structch_1_1syst_1_1mass.html":[16,0,0,0,5], -"structch_1_1syst_1_1mass.html#a0938bfa4855dfc837563804b4027de58":[16,0,0,0,5,0], -"structch_1_1syst_1_1process.html":[16,0,0,0,6], -"structch_1_1syst_1_1process.html#a92c10a4f56d6b72940dc816ef6421943":[16,0,0,0,6,0], -"structch_1_1tupleprint_1_1_tuple_printer.html":[16,0,0,1,0], -"structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html":[16,0,0,1,1], -"structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html":[16,0,0,1,2] +"structch_1_1syst_1_1era.html":[16,0,0,0,2] }; diff --git a/navtreeindex4.js b/navtreeindex4.js new file mode 100644 index 00000000000..19d8572d782 --- /dev/null +++ b/navtreeindex4.js @@ -0,0 +1,11 @@ +var NAVTREEINDEX4 = +{ +"structch_1_1syst_1_1era.html#a3efbe3d6162bf81819ebc883e6c6ffda":[16,0,0,0,2,0], +"structch_1_1syst_1_1mass.html":[16,0,0,0,4], +"structch_1_1syst_1_1mass.html#a0938bfa4855dfc837563804b4027de58":[16,0,0,0,4,0], +"structch_1_1syst_1_1process.html":[16,0,0,0,5], +"structch_1_1syst_1_1process.html#a92c10a4f56d6b72940dc816ef6421943":[16,0,0,0,5,0], +"structch_1_1tupleprint_1_1_tuple_printer.html":[16,0,0,1,0], +"structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html":[16,0,0,1,2], +"structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html":[16,0,0,1,1] +}; diff --git a/pages.html b/pages.html index 06f730b0898..1a1a602720b 100644 --- a/pages.html +++ b/pages.html @@ -4,7 +4,7 @@ - + CombineHarvester: Related Pages @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    diff --git a/plotting_8py.html b/plotting_8py.html index 7f021009ce5..f94d0f82a45 100644 --- a/plotting_8py.html +++ b/plotting_8py.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/python/plotting.py File Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - + @@ -83,7 +80,7 @@
    @@ -103,9 +100,7 @@
    plotting.py File Reference
    @@ -115,214 +110,8 @@ - + -

    Namespaces

     python.plotting
     plotting
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    def python.plotting.getOverlayMarkerAndLegend (legend, entries, options, borderSize=2.0/3, markerStyle="P")
     
    Global Style

    Set the properties of the global gStyle object and create colours and colour palettes

    -
    def python.plotting.SetTDRStyle ()
     Sets the PubComm recommended style. More...
     
    def python.plotting.ModTDRStyle (width=600, height=600, t=0.06, b=0.12, l=0.16, r=0.04)
     Modified version of the tdrStyle. More...
     
    def python.plotting.SetBirdPalette ()
     
    def python.plotting.SetDeepSeaPalette ()
     
    def python.plotting.SetCorrMatrixPalette ()
     
    def python.plotting.CreateTransparentColor (color, alpha)
     
    def python.plotting.Set (obj, **kwargs)
     
    TPad Layout

    Create TPads for pre-defined layouts, for example adding a smaller lower TPad to contain ratios of objects in the main pad.

    -
    def python.plotting.OnePad ()
     
    def python.plotting.TwoPadSplit (split_point, gap_low, gap_high)
     
    def python.plotting.ThreePadSplit (upper_split_point, split_point, gap_low, gap_high)
     
    def python.plotting.MultiRatioSplit (split_points, gaps_low, gaps_high)
     Create a set of TPads split vertically on the TCanvas. More...
     
    def python.plotting.TwoPadSplitColumns (split_point, gap_left, gap_right)
     
    def python.plotting.MultiRatioSplitColumns (split_points, gaps_left, gaps_right)
     
    def python.plotting.SetupTwoPadSplitAsRatio (pads, upper, lower, y_title, y_centered, y_min, y_max)
     
    def python.plotting.StandardAxes (xaxis, yaxis, var, units, fmt='.1f')
     
    Axis histograms

    By default the first TH1 or TGraph drawn on a pad takes control of the x- and y-axis settings. A better way is to create dedicated "axis" TH1s that can be drawn first, one per pad, which will then control all the axis properties.

    -
    def python.plotting.CreateAxisHist (src, at_limits=True)
     
    def python.plotting.CreateAxisHists (n, src, at_limits)
     
    def python.plotting.GetAxisHist (pad)
     
    TFile functions

    A collection of functions for working with TFiles.

    -
    def python.plotting.TFileIsGood (filename)
     Performs a series of tests on a TFile to ensure that it can be opened without errors. More...
     
    def python.plotting.MakeTChain (files, tree)
     
    def python.plotting.Get (file, obj)
     
    def python.plotting.ParamFromFilename (filename, param)
     
    Object creation

    These functions take existing objects (TH1s, TGraphs, TTrees, etc) and build new objects

    -
    def python.plotting.TGraphFromTree (tree, xvar, yvar, selection)
     
    def python.plotting.TGraph2DFromTree (tree, xvar, yvar, zvar, selection)
     
    def python.plotting.RocCurveFrom1DHists (h_x, h_y, cut_is_greater_than)
     
    def python.plotting.TH2FromTGraph2D (graph, method='BinEdgeAligned', force_x_width=None, force_y_width=None)
     Build an empty TH2 from the set of points in a TGraph2D. More...
     
    def python.plotting.MakeErrorBand (LowerGraph, UpperGraph)
     
    def python.plotting.LimitTGraphFromJSON (js, label)
     
    def python.plotting.LimitTGraphFromJSONFile (jsfile, label)
     
    def python.plotting.ToyTGraphFromJSON (js, label)
     
    def python.plotting.ToyTGraphFromJSONFile (jsfile, label)
     
    def python.plotting.LimitBandTGraphFromJSON (js, central, lo, hi)
     
    def python.plotting.StandardLimitsFromJSONFile (json_file, draw=['obs', 'exp0', 'exp1', 'exp2'])
     
    def python.plotting.bestFit (tree, x, y, cut)
     
    def python.plotting.treeToHist2D (t, x, y, name, cut, xmin, xmax, ymin, ymax, xbins, ybins)
     
    def python.plotting.makeHist1D (name, xbins, graph, scaleXrange=1.0, absoluteXrange=None)
     
    def python.plotting.makeHist2D (name, xbins, ybins, graph2d)
     
    def python.plotting.makeVarBinHist2D (name, xbins, ybins)
     
    def python.plotting.GraphDifference (graph1, graph2, relative)
     
    def python.plotting.GraphDivide (num, den)
     
    def python.plotting.MakeRatioHist (num, den, num_err, den_err)
     Make a new ratio TH1 from numerator and denominator TH1s with optional error propagation. More...
     
    Graph manipulation

    These functions are mostly used to modify TGraphs corresponding to likelihood scans.

    -
    def python.plotting.RemoveGraphXDuplicates (graph)
     
    def python.plotting.ApplyGraphYOffset (graph, y_off)
     
    def python.plotting.RemoveGraphYAll (graph, val)
     
    def python.plotting.RemoveSmallDelta (graph, val)
     
    def python.plotting.RemoveGraphYAbove (graph, val)
     
    def python.plotting.SetMinToZero (graph)
     
    def python.plotting.ImproveMinimum (graph, func, doIt=False)
     
    def python.plotting.FindCrossingsWithSpline (graph, func, yval)
     
    def python.plotting.ReZeroTGraph (gr, doIt=False)
     
    def python.plotting.FilterGraph (gr, n=3)
     
    def python.plotting.RemoveInXRange (gr, xmin=0, xmax=1)
     
    def python.plotting.RemoveNearMin (graph, val, spacing=None)
     
    def python.plotting.SortGraph (Graph)
     
    TPad adjustments

    These functions are mostly concerned with adjusting the axis ranges to make sure objects are not being drawn outside the range of the pad or underneath other objects, e.g. the legend.

    -
    def python.plotting.FixTopRange (pad, fix_y, fraction)
     
    def python.plotting.FixBothRanges (pad, fix_y_lo, frac_lo, fix_y_hi, frac_hi)
     Adjusts y-axis range such that a lower and a higher value are located a fixed fraction of the frame height away from a new minimum and maximum respectively. More...
     
    def python.plotting.GetPadYMaxInRange (pad, x_min, x_max, do_min=False)
     
    def python.plotting.GetPadYMax (pad, do_min=False)
     
    def python.plotting.GetPadYMin (pad)
     
    def python.plotting.FixOverlay ()
     
    def python.plotting.FixBoxPadding (pad, box, frac)
     
    Decoration

    Functions for drawing legends, logos, title, lines and boxes

    -
    def python.plotting.StandardAxes (xaxis, yaxis, var, units)
     
    def python.plotting.DrawCMSLogo (pad, cmsText, extraText, iPosX, relPosX, relPosY, relExtraDY, extraText2='', cmsTextSize=0.8)
     Blah. More...
     
    def python.plotting.PositionedLegend (width, height, pos, offset, horizontaloffset=None)
     
    def python.plotting.DrawHorizontalLine (pad, line, yval)
     
    def python.plotting.DrawVerticalLine (pad, line, xval)
     
    def python.plotting.DrawVerticalBand (pad, box, x1, x2)
     
    def python.plotting.DrawTitle (pad, text, align, textOffset=0.2, textSize=0.6)
     
    Limit plotting

    Common limit-plotting tasks, for example setting the Brazilian colour scheme for expected limit bands and drawing the associated TGraphs in the correct order

    -
    def python.plotting.isclose (a, b, rel_tol=1e-9, abs_tol=0.0)
     
    def python.plotting.StyleLimitBand (graph_dict, overwrite_style_dict=None)
     
    def python.plotting.DrawLimitBand (pad, graph_dict, draw=['exp2', 'exp1', 'exp0', 'obs'], draw_legend=None, legend=None, legend_overwrite=None)
     
    Contour plotting

    Creating contour TGraphs using TH2s and TGraph2Ds

    -
    def python.plotting.contourFromTH2 (h2in, threshold, minPoints=10, frameValue=1000.)
     
    def python.plotting.frameTH2D (hist, threshold, frameValue=1000)
     
    def python.plotting.fastFillTH2 (hist2d, graph, initalValue=99999, interpolateMissing=False)
     
    def python.plotting.fillTH2 (hist2d, graph)
     
    def python.plotting.fillInvertedTH2 (hist2d, graph)
     
    def python.plotting.NewInterpolate (hist)
     
    def python.plotting.rebin (hist)
     
    def python.plotting.higgsConstraint (model, higgstype)
     
    - - -

    -Variables

    list python.plotting.COL_STORE = []
     
    diff --git a/plotting_8py.js b/plotting_8py.js deleted file mode 100644 index 53b2f59b449..00000000000 --- a/plotting_8py.js +++ /dev/null @@ -1,84 +0,0 @@ -var plotting_8py = -[ - [ "SetTDRStyle", "plotting_8py.html#a985823947a10fe741fd66736aff50b7e", null ], - [ "ModTDRStyle", "plotting_8py.html#a96d0e09c5c4ee59bd3e1c00050a3ac68", null ], - [ "SetBirdPalette", "plotting_8py.html#af48f1beff13dca9995aca96ecac48f27", null ], - [ "SetDeepSeaPalette", "plotting_8py.html#a7711053e47e60c813e7a3f0855ed6159", null ], - [ "SetCorrMatrixPalette", "plotting_8py.html#aae4d4cf46e04b00b9a336be508218b17", null ], - [ "CreateTransparentColor", "plotting_8py.html#a62481c509fe69ac9d6d61aa69b17dc8e", null ], - [ "Set", "plotting_8py.html#afa5ad39d3467939dbf1252650e62c0e8", null ], - [ "OnePad", "plotting_8py.html#aedf242792ebe14a722fed350f225d53c", null ], - [ "TwoPadSplit", "plotting_8py.html#a42ec9d87c1a106fa4bb6707a6b490846", null ], - [ "ThreePadSplit", "plotting_8py.html#ae5bed13c05b2ee4a3b3eb9ea966c7f23", null ], - [ "MultiRatioSplit", "plotting_8py.html#aba63da9138777e72b3516e1a76bd54af", null ], - [ "TwoPadSplitColumns", "plotting_8py.html#a3e72f7cb7088669f044870a43cd191fc", null ], - [ "MultiRatioSplitColumns", "plotting_8py.html#a774df4e4f7e5c1888a96ed042edd36b2", null ], - [ "SetupTwoPadSplitAsRatio", "plotting_8py.html#ac6210cfafae6f9dd8b7ec9d30f3b8275", null ], - [ "StandardAxes", "plotting_8py.html#a0e1f1088e52d9a278b2e0dc1af4512ba", null ], - [ "CreateAxisHist", "plotting_8py.html#ac86dc839c396ece76049116769cce181", null ], - [ "CreateAxisHists", "plotting_8py.html#a06656a23374162431db40f47baea5f76", null ], - [ "GetAxisHist", "plotting_8py.html#a8730baf6077fb5e655003a7fdb93d8f5", null ], - [ "TFileIsGood", "plotting_8py.html#a966f8767c6188136aa2e16967b776931", null ], - [ "MakeTChain", "plotting_8py.html#a64ee6bffa0941169d495863f3294c9a4", null ], - [ "Get", "plotting_8py.html#a150525eee69b8e2727690887a7bd4996", null ], - [ "ParamFromFilename", "plotting_8py.html#a6a1dcbff61edbcd15e68682f3e8836dc", null ], - [ "TGraphFromTree", "plotting_8py.html#a39c399a361eec985033409a45e7e74b9", null ], - [ "TGraph2DFromTree", "plotting_8py.html#a564405ccf77ddbeb4f873925fa514e70", null ], - [ "RocCurveFrom1DHists", "plotting_8py.html#a299b2acd01d8e1d8d646a72164323fca", null ], - [ "TH2FromTGraph2D", "plotting_8py.html#ac888e7dc2299e1562bb4e10d3e5e909a", null ], - [ "MakeErrorBand", "plotting_8py.html#a57beab29bf647837ac4f0460335ee03d", null ], - [ "LimitTGraphFromJSON", "plotting_8py.html#a62d4ff5f662142eb7f035c9d6a23499c", null ], - [ "LimitTGraphFromJSONFile", "plotting_8py.html#a82a5f62f79fe15d0c9b2b42d8ce61b7a", null ], - [ "ToyTGraphFromJSON", "plotting_8py.html#aaebc129aabfb0bceabb1759a251cf1c5", null ], - [ "ToyTGraphFromJSONFile", "plotting_8py.html#a9f3dc03b8c2f1b166a56c528e0713e8e", null ], - [ "LimitBandTGraphFromJSON", "plotting_8py.html#aa29285177084b6ed15e8f622f83ab4fa", null ], - [ "StandardLimitsFromJSONFile", "plotting_8py.html#a5d17f0ddd4eb0e15dc97958d25323f1c", null ], - [ "bestFit", "plotting_8py.html#adeba935104d42e1b1991046ddf8573e8", null ], - [ "treeToHist2D", "plotting_8py.html#a0c281eca93efb5bae6b14237ca2c1c36", null ], - [ "makeHist1D", "plotting_8py.html#aed426fb163d0ac1a6bd8fed66acd6178", null ], - [ "makeHist2D", "plotting_8py.html#a0c4fbbe51debf6af728af019e9a0a031", null ], - [ "makeVarBinHist2D", "plotting_8py.html#a1b60082b4561b4b3af03a5916080162b", null ], - [ "GraphDifference", "plotting_8py.html#a0f8d9d2d1e51e599d676fc0758083bf2", null ], - [ "GraphDivide", "plotting_8py.html#aff48ab1136cac75e4af3b66cc055f030", null ], - [ "MakeRatioHist", "plotting_8py.html#ab38cd8888aa183c4f351925cd6d49478", null ], - [ "RemoveGraphXDuplicates", "plotting_8py.html#aac0d06e709f0d32c009900f9a3fbed1e", null ], - [ "ApplyGraphYOffset", "plotting_8py.html#adff090f8dc97c979fc8056e0844669c4", null ], - [ "RemoveGraphYAll", "plotting_8py.html#a41521655e488b97e5e50289fec090fd6", null ], - [ "RemoveSmallDelta", "plotting_8py.html#a7f7ff82b2cb2e897aa848dd097228507", null ], - [ "RemoveGraphYAbove", "plotting_8py.html#abdd045f87fa96a1274213a85208e8a45", null ], - [ "SetMinToZero", "plotting_8py.html#a522b5996aee3a56cab95f8a94c0d2009", null ], - [ "ImproveMinimum", "plotting_8py.html#a2cdb3efbda1fb72cb528658c8be0e0a2", null ], - [ "FindCrossingsWithSpline", "plotting_8py.html#a295d9454418dea7b25a66b3b0e1cbb91", null ], - [ "ReZeroTGraph", "plotting_8py.html#a206835e129a1cec888da0a48e8762bd9", null ], - [ "FilterGraph", "plotting_8py.html#aee54f1dc361284346c88192e1a060aad", null ], - [ "RemoveInXRange", "plotting_8py.html#ad36eb972250a37d6faac15d84d764af6", null ], - [ "RemoveNearMin", "plotting_8py.html#af7c1d446d7f6d584150ffa60c7b2bd77", null ], - [ "SortGraph", "plotting_8py.html#aaecde5040c409a79db0a7cc3d5a5007f", null ], - [ "FixTopRange", "plotting_8py.html#a66b09224086d976e544a83b86c55df30", null ], - [ "FixBothRanges", "plotting_8py.html#a3f697f7a987d5b37c585a4dd0b3674ea", null ], - [ "GetPadYMaxInRange", "plotting_8py.html#ae99dbced2e99bc514bdfa5f57f51ba81", null ], - [ "GetPadYMax", "plotting_8py.html#a1adc45cdaed9e220983039a80fbe86cb", null ], - [ "GetPadYMin", "plotting_8py.html#adc51ad4d5572e045e882a1cd12a22ce6", null ], - [ "FixOverlay", "plotting_8py.html#aecb90c5d800c694865a52c8cbe023b63", null ], - [ "FixBoxPadding", "plotting_8py.html#a92d225e6a19a9705204d6137ed884e66", null ], - [ "StandardAxes", "plotting_8py.html#a504cc85d525735f2042e0f72b6e04ef7", null ], - [ "DrawCMSLogo", "plotting_8py.html#a2f37093b1828f3553adf6c59e9a86aa4", null ], - [ "PositionedLegend", "plotting_8py.html#ad7f839ac00738ce41f8503ac96e671cd", null ], - [ "DrawHorizontalLine", "plotting_8py.html#aa59088e7ab459b7d23bbc043dc6be97a", null ], - [ "DrawVerticalLine", "plotting_8py.html#a42fdb746289c7f95685cbc0182f140e1", null ], - [ "DrawVerticalBand", "plotting_8py.html#a1958833c592d44945a72957e87089cbf", null ], - [ "DrawTitle", "plotting_8py.html#ae8b7215feda9add6dfa50619eb441857", null ], - [ "isclose", "plotting_8py.html#a3730216ae300da42b4a0e1b28baad343", null ], - [ "StyleLimitBand", "plotting_8py.html#a156ac4a82a5eb80648008c9abadbd9c0", null ], - [ "DrawLimitBand", "plotting_8py.html#a2c4bc7ae087717eb744bacdb14207e63", null ], - [ "contourFromTH2", "plotting_8py.html#af2b0eeb9509ca109461453598cd3aae8", null ], - [ "frameTH2D", "plotting_8py.html#ad901fa38f1b30a0c9a2bc3759a6030af", null ], - [ "fastFillTH2", "plotting_8py.html#a59730ba620dbb43bb688ab10f2479757", null ], - [ "fillTH2", "plotting_8py.html#a39e68474eaae8c5c0529d96e25aa698d", null ], - [ "fillInvertedTH2", "plotting_8py.html#a51c8979fbd3c58c8ea17353e410a6718", null ], - [ "NewInterpolate", "plotting_8py.html#ac3c06e73bd892e15ea8fc2428d6cef8e", null ], - [ "rebin", "plotting_8py.html#a063d0ef08d16c34e8b7f56ba484d202d", null ], - [ "higgsConstraint", "plotting_8py.html#a1f64290754cdff288cedd257f2e2a1c2", null ], - [ "getOverlayMarkerAndLegend", "plotting_8py.html#ae40b4249dbf36e8a3815ee51853332d7", null ], - [ "COL_STORE", "plotting_8py.html#a9dd11f8a47a545cac3a5e35ccac70075", null ] -]; \ No newline at end of file diff --git a/plotting_8py_source.html b/plotting_8py_source.html index 02b74554920..bd90a8f272c 100644 --- a/plotting_8py_source.html +++ b/plotting_8py_source.html @@ -4,7 +4,7 @@ - + CombineHarvester: CombineTools/python/plotting.py Source File @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -106,7 +103,7 @@
    plotting.py
    -Go to the documentation of this file.
    1 from __future__ import absolute_import
    +Go to the documentation of this file.
    1 from __future__ import absolute_import
    2 from __future__ import print_function
    3 import ROOT as R
    4 import math
    @@ -115,1972 +112,1920 @@
    7 import json
    8 import types
    9 import six
    -
    10 from six.moves import range
    -
    11 
    -
    12 COL_STORE = []
    -
    13 
    +
    10 import ctypes
    +
    11 from six.moves import range
    +
    12 
    +
    13 COL_STORE = []
    14 
    -
    19 
    +
    15 
    20 
    -
    21 def SetTDRStyle():
    -
    22  """Sets the PubComm recommended style
    -
    23 
    -
    24  Just a copy of <http://ghm.web.cern.ch/ghm/plots/MacroExample/tdrstyle.C>
    -
    25  @sa ModTDRStyle() to use this style with some additional customisation.
    -
    26  """
    -
    27  # For the canvas:
    -
    28  R.gStyle.SetCanvasBorderMode(0)
    -
    29  R.gStyle.SetCanvasColor(R.kWhite)
    -
    30  R.gStyle.SetCanvasDefH(600) # Height of canvas
    -
    31  R.gStyle.SetCanvasDefW(600) # Width of canvas
    -
    32  R.gStyle.SetCanvasDefX(0) # POsition on screen
    -
    33  R.gStyle.SetCanvasDefY(0)
    -
    34 
    -
    35  # For the Pad:
    -
    36  R.gStyle.SetPadBorderMode(0)
    -
    37  # R.gStyle.SetPadBorderSize(Width_t size = 1)
    -
    38  R.gStyle.SetPadColor(R.kWhite)
    -
    39  R.gStyle.SetPadGridX(False)
    -
    40  R.gStyle.SetPadGridY(False)
    -
    41  R.gStyle.SetGridColor(0)
    -
    42  R.gStyle.SetGridStyle(3)
    -
    43  R.gStyle.SetGridWidth(1)
    -
    44 
    -
    45  # For the frame:
    -
    46  R.gStyle.SetFrameBorderMode(0)
    -
    47  R.gStyle.SetFrameBorderSize(1)
    -
    48  R.gStyle.SetFrameFillColor(0)
    -
    49  R.gStyle.SetFrameFillStyle(0)
    -
    50  R.gStyle.SetFrameLineColor(1)
    -
    51  R.gStyle.SetFrameLineStyle(1)
    -
    52  R.gStyle.SetFrameLineWidth(1)
    -
    53 
    -
    54  # For the histo:
    -
    55  # R.gStyle.SetHistFillColor(1)
    -
    56  # R.gStyle.SetHistFillStyle(0)
    -
    57  R.gStyle.SetHistLineColor(1)
    -
    58  R.gStyle.SetHistLineStyle(0)
    -
    59  R.gStyle.SetHistLineWidth(1)
    -
    60  # R.gStyle.SetLegoInnerR(Float_t rad = 0.5)
    -
    61  # R.gStyle.SetNumberContours(Int_t number = 20)
    -
    62 
    -
    63  R.gStyle.SetEndErrorSize(2)
    -
    64  # R.gStyle.SetErrorMarker(20)
    -
    65  # R.gStyle.SetErrorX(0.)
    -
    66 
    -
    67  R.gStyle.SetMarkerStyle(20)
    -
    68 
    -
    69  # For the fit/function:
    -
    70  R.gStyle.SetOptFit(1)
    -
    71  R.gStyle.SetFitFormat('5.4g')
    -
    72  R.gStyle.SetFuncColor(2)
    -
    73  R.gStyle.SetFuncStyle(1)
    -
    74  R.gStyle.SetFuncWidth(1)
    -
    75 
    -
    76  # For the date:
    -
    77  R.gStyle.SetOptDate(0)
    -
    78  # R.gStyle.SetDateX(Float_t x = 0.01)
    -
    79  # R.gStyle.SetDateY(Float_t y = 0.01)
    -
    80 
    -
    81  # For the statistics box:
    -
    82  R.gStyle.SetOptFile(0)
    -
    83  R.gStyle.SetOptStat(0)
    -
    84  # To display the mean and RMS: SetOptStat('mr')
    -
    85  R.gStyle.SetStatColor(R.kWhite)
    -
    86  R.gStyle.SetStatFont(42)
    -
    87  R.gStyle.SetStatFontSize(0.025)
    -
    88  R.gStyle.SetStatTextColor(1)
    -
    89  R.gStyle.SetStatFormat('6.4g')
    -
    90  R.gStyle.SetStatBorderSize(1)
    -
    91  R.gStyle.SetStatH(0.1)
    -
    92  R.gStyle.SetStatW(0.15)
    -
    93  # R.gStyle.SetStatStyle(Style_t style = 1001)
    -
    94  # R.gStyle.SetStatX(Float_t x = 0)
    -
    95  # R.gStyle.SetStatY(Float_t y = 0)
    -
    96 
    -
    97  # Margins:
    -
    98  R.gStyle.SetPadTopMargin(0.05)
    -
    99  R.gStyle.SetPadBottomMargin(0.13)
    -
    100  R.gStyle.SetPadLeftMargin(0.16)
    -
    101  R.gStyle.SetPadRightMargin(0.02)
    -
    102 
    -
    103  # For the Global title:
    -
    104  R.gStyle.SetOptTitle(0)
    -
    105  R.gStyle.SetTitleFont(42)
    -
    106  R.gStyle.SetTitleColor(1)
    -
    107  R.gStyle.SetTitleTextColor(1)
    -
    108  R.gStyle.SetTitleFillColor(10)
    -
    109  R.gStyle.SetTitleFontSize(0.05)
    -
    110  # R.gStyle.SetTitleH(0); # Set the height of the title box
    -
    111  # R.gStyle.SetTitleW(0); # Set the width of the title box
    -
    112  # R.gStyle.SetTitleX(0); # Set the position of the title box
    -
    113  # R.gStyle.SetTitleY(0.985); # Set the position of the title box
    -
    114  # R.gStyle.SetTitleStyle(Style_t style = 1001)
    -
    115  # R.gStyle.SetTitleBorderSize(2)
    -
    116 
    -
    117  # For the axis titles:
    -
    118  R.gStyle.SetTitleColor(1, 'XYZ')
    -
    119  R.gStyle.SetTitleFont(42, 'XYZ')
    -
    120  R.gStyle.SetTitleSize(0.06, 'XYZ')
    -
    121  # Another way to set the size?
    -
    122  # R.gStyle.SetTitleXSize(Float_t size = 0.02)
    -
    123  # R.gStyle.SetTitleYSize(Float_t size = 0.02)
    -
    124  R.gStyle.SetTitleXOffset(0.9)
    -
    125  R.gStyle.SetTitleYOffset(1.25)
    -
    126  # R.gStyle.SetTitleOffset(1.1, 'Y'); # Another way to set the Offset
    -
    127 
    -
    128  # For the axis labels:
    -
    129 
    -
    130  R.gStyle.SetLabelColor(1, 'XYZ')
    -
    131  R.gStyle.SetLabelFont(42, 'XYZ')
    -
    132  R.gStyle.SetLabelOffset(0.007, 'XYZ')
    -
    133  R.gStyle.SetLabelSize(0.05, 'XYZ')
    -
    134 
    -
    135  # For the axis:
    -
    136 
    -
    137  R.gStyle.SetAxisColor(1, 'XYZ')
    -
    138  R.gStyle.SetStripDecimals(True)
    -
    139  R.gStyle.SetTickLength(0.03, 'XYZ')
    -
    140  R.gStyle.SetNdivisions(510, 'XYZ')
    -
    141  R.gStyle.SetPadTickX(1)
    -
    142  R.gStyle.SetPadTickY(1)
    -
    143 
    -
    144  # Change for log plots:
    -
    145  R.gStyle.SetOptLogx(0)
    -
    146  R.gStyle.SetOptLogy(0)
    -
    147  R.gStyle.SetOptLogz(0)
    -
    148 
    -
    149  # Postscript options:
    -
    150  R.gStyle.SetPaperSize(20., 20.)
    -
    151  # R.gStyle.SetLineScalePS(Float_t scale = 3)
    -
    152  # R.gStyle.SetLineStyleString(Int_t i, const char* text)
    -
    153  # R.gStyle.SetHeaderPS(const char* header)
    -
    154  # R.gStyle.SetTitlePS(const char* pstitle)
    -
    155 
    -
    156  # R.gStyle.SetBarOffset(Float_t baroff = 0.5)
    -
    157  # R.gStyle.SetBarWidth(Float_t barwidth = 0.5)
    -
    158  # R.gStyle.SetPaintTextFormat(const char* format = 'g')
    -
    159  # R.gStyle.SetPalette(Int_t ncolors = 0, Int_t* colors = 0)
    -
    160  # R.gStyle.SetTimeOffset(Double_t toffset)
    -
    161  # R.gStyle.SetHistMinimumZero(kTRUE)
    -
    162 
    -
    163  R.gStyle.SetHatchesLineWidth(5)
    -
    164  R.gStyle.SetHatchesSpacing(0.05)
    -
    165 
    +
    21 
    +
    22 def SetTDRStyle():
    +
    23  """Sets the PubComm recommended style
    +
    24 
    +
    25  Just a copy of <http://ghm.web.cern.ch/ghm/plots/MacroExample/tdrstyle.C>
    +
    26  @sa ModTDRStyle() to use this style with some additional customisation.
    +
    27  """
    +
    28  # For the canvas:
    +
    29  R.gStyle.SetCanvasBorderMode(0)
    +
    30  R.gStyle.SetCanvasColor(R.kWhite)
    +
    31  R.gStyle.SetCanvasDefH(600) # Height of canvas
    +
    32  R.gStyle.SetCanvasDefW(600) # Width of canvas
    +
    33  R.gStyle.SetCanvasDefX(0) # POsition on screen
    +
    34  R.gStyle.SetCanvasDefY(0)
    +
    35 
    +
    36  # For the Pad:
    +
    37  R.gStyle.SetPadBorderMode(0)
    +
    38  # R.gStyle.SetPadBorderSize(Width_t size = 1)
    +
    39  R.gStyle.SetPadColor(R.kWhite)
    +
    40  R.gStyle.SetPadGridX(False)
    +
    41  R.gStyle.SetPadGridY(False)
    +
    42  R.gStyle.SetGridColor(0)
    +
    43  R.gStyle.SetGridStyle(3)
    +
    44  R.gStyle.SetGridWidth(1)
    +
    45 
    +
    46  # For the frame:
    +
    47  R.gStyle.SetFrameBorderMode(0)
    +
    48  R.gStyle.SetFrameBorderSize(1)
    +
    49  R.gStyle.SetFrameFillColor(0)
    +
    50  R.gStyle.SetFrameFillStyle(0)
    +
    51  R.gStyle.SetFrameLineColor(1)
    +
    52  R.gStyle.SetFrameLineStyle(1)
    +
    53  R.gStyle.SetFrameLineWidth(1)
    +
    54 
    +
    55  # For the histo:
    +
    56  # R.gStyle.SetHistFillColor(1)
    +
    57  # R.gStyle.SetHistFillStyle(0)
    +
    58  R.gStyle.SetHistLineColor(1)
    +
    59  R.gStyle.SetHistLineStyle(0)
    +
    60  R.gStyle.SetHistLineWidth(1)
    +
    61  # R.gStyle.SetLegoInnerR(Float_t rad = 0.5)
    +
    62  # R.gStyle.SetNumberContours(Int_t number = 20)
    +
    63 
    +
    64  R.gStyle.SetEndErrorSize(2)
    +
    65  # R.gStyle.SetErrorMarker(20)
    +
    66  # R.gStyle.SetErrorX(0.)
    +
    67 
    +
    68  R.gStyle.SetMarkerStyle(20)
    +
    69 
    +
    70  # For the fit/function:
    +
    71  R.gStyle.SetOptFit(1)
    +
    72  R.gStyle.SetFitFormat('5.4g')
    +
    73  R.gStyle.SetFuncColor(2)
    +
    74  R.gStyle.SetFuncStyle(1)
    +
    75  R.gStyle.SetFuncWidth(1)
    +
    76 
    +
    77  # For the date:
    +
    78  R.gStyle.SetOptDate(0)
    +
    79  # R.gStyle.SetDateX(Float_t x = 0.01)
    +
    80  # R.gStyle.SetDateY(Float_t y = 0.01)
    +
    81 
    +
    82  # For the statistics box:
    +
    83  R.gStyle.SetOptFile(0)
    +
    84  R.gStyle.SetOptStat(0)
    +
    85  # To display the mean and RMS: SetOptStat('mr')
    +
    86  R.gStyle.SetStatColor(R.kWhite)
    +
    87  R.gStyle.SetStatFont(42)
    +
    88  R.gStyle.SetStatFontSize(0.025)
    +
    89  R.gStyle.SetStatTextColor(1)
    +
    90  R.gStyle.SetStatFormat('6.4g')
    +
    91  R.gStyle.SetStatBorderSize(1)
    +
    92  R.gStyle.SetStatH(0.1)
    +
    93  R.gStyle.SetStatW(0.15)
    +
    94  # R.gStyle.SetStatStyle(Style_t style = 1001)
    +
    95  # R.gStyle.SetStatX(Float_t x = 0)
    +
    96  # R.gStyle.SetStatY(Float_t y = 0)
    +
    97 
    +
    98  # Margins:
    +
    99  R.gStyle.SetPadTopMargin(0.05)
    +
    100  R.gStyle.SetPadBottomMargin(0.13)
    +
    101  R.gStyle.SetPadLeftMargin(0.16)
    +
    102  R.gStyle.SetPadRightMargin(0.02)
    +
    103 
    +
    104  # For the Global title:
    +
    105  R.gStyle.SetOptTitle(0)
    +
    106  R.gStyle.SetTitleFont(42)
    +
    107  R.gStyle.SetTitleColor(1)
    +
    108  R.gStyle.SetTitleTextColor(1)
    +
    109  R.gStyle.SetTitleFillColor(10)
    +
    110  R.gStyle.SetTitleFontSize(0.05)
    +
    111  # R.gStyle.SetTitleH(0); # Set the height of the title box
    +
    112  # R.gStyle.SetTitleW(0); # Set the width of the title box
    +
    113  # R.gStyle.SetTitleX(0); # Set the position of the title box
    +
    114  # R.gStyle.SetTitleY(0.985); # Set the position of the title box
    +
    115  # R.gStyle.SetTitleStyle(Style_t style = 1001)
    +
    116  # R.gStyle.SetTitleBorderSize(2)
    +
    117 
    +
    118  # For the axis titles:
    +
    119  R.gStyle.SetTitleColor(1, 'XYZ')
    +
    120  R.gStyle.SetTitleFont(42, 'XYZ')
    +
    121  R.gStyle.SetTitleSize(0.06, 'XYZ')
    +
    122  # Another way to set the size?
    +
    123  # R.gStyle.SetTitleXSize(Float_t size = 0.02)
    +
    124  # R.gStyle.SetTitleYSize(Float_t size = 0.02)
    +
    125  R.gStyle.SetTitleXOffset(0.9)
    +
    126  R.gStyle.SetTitleYOffset(1.25)
    +
    127  # R.gStyle.SetTitleOffset(1.1, 'Y'); # Another way to set the Offset
    +
    128 
    +
    129  # For the axis labels:
    +
    130 
    +
    131  R.gStyle.SetLabelColor(1, 'XYZ')
    +
    132  R.gStyle.SetLabelFont(42, 'XYZ')
    +
    133  R.gStyle.SetLabelOffset(0.007, 'XYZ')
    +
    134  R.gStyle.SetLabelSize(0.05, 'XYZ')
    +
    135 
    +
    136  # For the axis:
    +
    137 
    +
    138  R.gStyle.SetAxisColor(1, 'XYZ')
    +
    139  R.gStyle.SetStripDecimals(True)
    +
    140  R.gStyle.SetTickLength(0.03, 'XYZ')
    +
    141  R.gStyle.SetNdivisions(510, 'XYZ')
    +
    142  R.gStyle.SetPadTickX(1)
    +
    143  R.gStyle.SetPadTickY(1)
    +
    144 
    +
    145  # Change for log plots:
    +
    146  R.gStyle.SetOptLogx(0)
    +
    147  R.gStyle.SetOptLogy(0)
    +
    148  R.gStyle.SetOptLogz(0)
    +
    149 
    +
    150  # Postscript options:
    +
    151  R.gStyle.SetPaperSize(20., 20.)
    +
    152  # R.gStyle.SetLineScalePS(Float_t scale = 3)
    +
    153  # R.gStyle.SetLineStyleString(Int_t i, const char* text)
    +
    154  # R.gStyle.SetHeaderPS(const char* header)
    +
    155  # R.gStyle.SetTitlePS(const char* pstitle)
    +
    156 
    +
    157  # R.gStyle.SetBarOffset(Float_t baroff = 0.5)
    +
    158  # R.gStyle.SetBarWidth(Float_t barwidth = 0.5)
    +
    159  # R.gStyle.SetPaintTextFormat(const char* format = 'g')
    +
    160  # R.gStyle.SetPalette(Int_t ncolors = 0, Int_t* colors = 0)
    +
    161  # R.gStyle.SetTimeOffset(Double_t toffset)
    +
    162  # R.gStyle.SetHistMinimumZero(kTRUE)
    +
    163 
    +
    164  R.gStyle.SetHatchesLineWidth(5)
    +
    165  R.gStyle.SetHatchesSpacing(0.05)
    166 
    -
    167 def ModTDRStyle(width=600, height=600, t=0.06, b=0.12, l=0.16, r=0.04):
    -
    168  """Modified version of the tdrStyle
    -
    169 
    -
    170  Args:
    -
    171  width (int): Canvas width in pixels
    -
    172  height (int): Canvas height in pixels
    -
    173  t (float): Pad top margin [0-1]
    -
    174  b (float): Pad bottom margin [0-1]
    -
    175  l (float): Pad left margin [0-1]
    -
    176  r (float): Pad right margin [0-1]
    -
    177  """
    -
    178  SetTDRStyle()
    -
    179 
    -
    180  # Set the default canvas width and height in pixels
    -
    181  R.gStyle.SetCanvasDefW(width)
    -
    182  R.gStyle.SetCanvasDefH(height)
    -
    183 
    -
    184  # Set the default margins. These are given as fractions of the pad height
    -
    185  # for `Top` and `Bottom` and the pad width for `Left` and `Right`. But we
    -
    186  # want to specify all of these as fractions of the shortest length.
    -
    187  def_w = float(R.gStyle.GetCanvasDefW())
    -
    188  def_h = float(R.gStyle.GetCanvasDefH())
    -
    189 
    -
    190  scale_h = (def_w / def_h) if (def_h > def_w) else 1.
    -
    191  scale_w = (def_h / def_w) if (def_w > def_h) else 1.
    -
    192 
    -
    193  def_min = def_h if (def_h < def_w) else def_w
    -
    194 
    -
    195  R.gStyle.SetPadTopMargin(t * scale_h)
    -
    196  # default 0.05
    -
    197  R.gStyle.SetPadBottomMargin(b * scale_h)
    -
    198  # default 0.13
    -
    199  R.gStyle.SetPadLeftMargin(l * scale_w)
    -
    200  # default 0.16
    -
    201  R.gStyle.SetPadRightMargin(r * scale_w)
    -
    202  # default 0.02
    -
    203  # But note the new CMS style sets these:
    -
    204  # 0.08, 0.12, 0.12, 0.04
    -
    205 
    -
    206  # Set number of axis tick divisions
    -
    207  R.gStyle.SetNdivisions(506, 'XYZ') # default 510
    -
    208 
    -
    209  # Some marker properties not set in the default tdr style
    -
    210  R.gStyle.SetMarkerColor(R.kBlack)
    -
    211  R.gStyle.SetMarkerSize(1.0)
    -
    212 
    -
    213  R.gStyle.SetLabelOffset(0.007, 'YZ')
    -
    214  # This is an adhoc adjustment to scale the x-axis label
    -
    215  # offset when we stretch plot vertically
    -
    216  # Will also need to increase if first x-axis label has more than one digit
    -
    217  R.gStyle.SetLabelOffset(0.005 * (3. - 2. / scale_h), 'X')
    -
    218 
    -
    219  # In this next part we do a slightly involved calculation to set the axis
    -
    220  # title offsets, depending on the values of the TPad dimensions and
    -
    221  # margins. This is to try and ensure that regardless of how these pad
    -
    222  # values are set, the axis titles will be located towards the edges of the
    -
    223  # canvas and not get pushed off the edge - which can often happen if a
    -
    224  # fixed value is used.
    -
    225  title_size = 0.05
    -
    226  title_px = title_size * def_min
    -
    227  label_size = 0.04
    -
    228  R.gStyle.SetTitleSize(title_size, 'XYZ')
    -
    229  R.gStyle.SetLabelSize(label_size, 'XYZ')
    -
    230 
    -
    231  R.gStyle.SetTitleXOffset(0.5 * scale_h *
    -
    232  (1.2 * (def_h * b * scale_h - 0.6 * title_px)) /
    -
    233  title_px)
    -
    234  R.gStyle.SetTitleYOffset(0.5 * scale_w *
    -
    235  (1.2 * (def_w * l * scale_w - 0.6 * title_px)) /
    -
    236  title_px)
    -
    237 
    -
    238  # Only draw ticks where we have an axis
    -
    239  R.gStyle.SetPadTickX(0)
    -
    240  R.gStyle.SetPadTickY(0)
    -
    241  R.gStyle.SetTickLength(0.02, 'XYZ')
    -
    242 
    -
    243  R.gStyle.SetLegendBorderSize(0)
    -
    244  R.gStyle.SetLegendFont(42)
    -
    245  R.gStyle.SetLegendFillColor(0)
    -
    246  R.gStyle.SetFillColor(0)
    -
    247 
    -
    248  R.gROOT.ForceStyle()
    -
    249 
    +
    167 
    +
    168 def ModTDRStyle(width=600, height=600, t=0.06, b=0.12, l=0.16, r=0.04):
    +
    169  """Modified version of the tdrStyle
    +
    170 
    +
    171  Args:
    +
    172  width (int): Canvas width in pixels
    +
    173  height (int): Canvas height in pixels
    +
    174  t (float): Pad top margin [0-1]
    +
    175  b (float): Pad bottom margin [0-1]
    +
    176  l (float): Pad left margin [0-1]
    +
    177  r (float): Pad right margin [0-1]
    +
    178  """
    +
    179  SetTDRStyle()
    +
    180 
    +
    181  # Set the default canvas width and height in pixels
    +
    182  R.gStyle.SetCanvasDefW(width)
    +
    183  R.gStyle.SetCanvasDefH(height)
    +
    184 
    +
    185  # Set the default margins. These are given as fractions of the pad height
    +
    186  # for `Top` and `Bottom` and the pad width for `Left` and `Right`. But we
    +
    187  # want to specify all of these as fractions of the shortest length.
    +
    188  def_w = float(R.gStyle.GetCanvasDefW())
    +
    189  def_h = float(R.gStyle.GetCanvasDefH())
    +
    190 
    +
    191  scale_h = (def_w / def_h) if (def_h > def_w) else 1.
    +
    192  scale_w = (def_h / def_w) if (def_w > def_h) else 1.
    +
    193 
    +
    194  def_min = def_h if (def_h < def_w) else def_w
    +
    195 
    +
    196  R.gStyle.SetPadTopMargin(t * scale_h)
    +
    197  # default 0.05
    +
    198  R.gStyle.SetPadBottomMargin(b * scale_h)
    +
    199  # default 0.13
    +
    200  R.gStyle.SetPadLeftMargin(l * scale_w)
    +
    201  # default 0.16
    +
    202  R.gStyle.SetPadRightMargin(r * scale_w)
    +
    203  # default 0.02
    +
    204  # But note the new CMS style sets these:
    +
    205  # 0.08, 0.12, 0.12, 0.04
    +
    206 
    +
    207  # Set number of axis tick divisions
    +
    208  R.gStyle.SetNdivisions(506, 'XYZ') # default 510
    +
    209 
    +
    210  # Some marker properties not set in the default tdr style
    +
    211  R.gStyle.SetMarkerColor(R.kBlack)
    +
    212  R.gStyle.SetMarkerSize(1.0)
    +
    213 
    +
    214  R.gStyle.SetLabelOffset(0.007, 'YZ')
    +
    215  # This is an adhoc adjustment to scale the x-axis label
    +
    216  # offset when we stretch plot vertically
    +
    217  # Will also need to increase if first x-axis label has more than one digit
    +
    218  R.gStyle.SetLabelOffset(0.005 * (3. - 2. / scale_h), 'X')
    +
    219 
    +
    220  # In this next part we do a slightly involved calculation to set the axis
    +
    221  # title offsets, depending on the values of the TPad dimensions and
    +
    222  # margins. This is to try and ensure that regardless of how these pad
    +
    223  # values are set, the axis titles will be located towards the edges of the
    +
    224  # canvas and not get pushed off the edge - which can often happen if a
    +
    225  # fixed value is used.
    +
    226  title_size = 0.05
    +
    227  title_px = title_size * def_min
    +
    228  label_size = 0.04
    +
    229  R.gStyle.SetTitleSize(title_size, 'XYZ')
    +
    230  R.gStyle.SetLabelSize(label_size, 'XYZ')
    +
    231 
    +
    232  R.gStyle.SetTitleXOffset(0.5 * scale_h *
    +
    233  (1.2 * (def_h * b * scale_h - 0.6 * title_px)) /
    +
    234  title_px)
    +
    235  R.gStyle.SetTitleYOffset(0.5 * scale_w *
    +
    236  (1.2 * (def_w * l * scale_w - 0.6 * title_px)) /
    +
    237  title_px)
    +
    238 
    +
    239  # Only draw ticks where we have an axis
    +
    240  R.gStyle.SetPadTickX(0)
    +
    241  R.gStyle.SetPadTickY(0)
    +
    242  R.gStyle.SetTickLength(0.02, 'XYZ')
    +
    243 
    +
    244  R.gStyle.SetLegendBorderSize(0)
    +
    245  R.gStyle.SetLegendFont(42)
    +
    246  R.gStyle.SetLegendFillColor(0)
    +
    247  R.gStyle.SetFillColor(0)
    +
    248 
    +
    249  R.gROOT.ForceStyle()
    250 
    - -
    252  nRGBs = 9
    -
    253  stops = array(
    -
    254  'd', [0.0000, 0.1250, 0.2500, 0.3750, 0.5000, 0.6250, 0.7500, 0.8750, 1.0000])
    -
    255  red = array(
    -
    256  'd', [0.2082, 0.0592, 0.0780, 0.0232, 0.1802, 0.5301, 0.8186, 0.9956, 0.9764])
    -
    257  green = array(
    -
    258  'd', [0.1664, 0.3599, 0.5041, 0.6419, 0.7178, 0.7492, 0.7328, 0.7862, 0.9832])
    -
    259  blue = array(
    -
    260  'd', [0.5293, 0.8684, 0.8385, 0.7914, 0.6425, 0.4662, 0.3499, 0.1968, 0.0539])
    -
    261  R.TColor.CreateGradientColorTable(nRGBs, stops, red, green, blue, 255, 1)
    -
    262 
    +
    251 
    +
    252 def SetBirdPalette():
    +
    253  nRGBs = 9
    +
    254  stops = array(
    +
    255  'd', [0.0000, 0.1250, 0.2500, 0.3750, 0.5000, 0.6250, 0.7500, 0.8750, 1.0000])
    +
    256  red = array(
    +
    257  'd', [0.2082, 0.0592, 0.0780, 0.0232, 0.1802, 0.5301, 0.8186, 0.9956, 0.9764])
    +
    258  green = array(
    +
    259  'd', [0.1664, 0.3599, 0.5041, 0.6419, 0.7178, 0.7492, 0.7328, 0.7862, 0.9832])
    +
    260  blue = array(
    +
    261  'd', [0.5293, 0.8684, 0.8385, 0.7914, 0.6425, 0.4662, 0.3499, 0.1968, 0.0539])
    +
    262  R.TColor.CreateGradientColorTable(nRGBs, stops, red, green, blue, 255, 1)
    263 
    - -
    265  nRGBs = 9
    -
    266  stops = array(
    -
    267  'd', [0.0000, 0.1250, 0.2500, 0.3750, 0.5000, 0.6250, 0.7500, 0.8750, 1.0000])
    -
    268  red = array(
    -
    269  'd', reversed([0./255., 9./255., 13./255., 17./255., 24./255., 32./255., 27./255., 25./255., 29./255.]))
    -
    270  green = array(
    -
    271  'd', reversed([0./255., 0./255., 0./255., 2./255., 37./255., 74./255., 113./255., 160./255., 221./255.]))
    -
    272  blue = array(
    -
    273  'd', reversed([28./255., 42./255., 59./255., 78./255., 98./255., 129./255., 154./255., 184./255., 221./255.]))
    -
    274  R.TColor.CreateGradientColorTable(nRGBs, stops, red, green, blue, 255, 1)
    -
    275 
    +
    264 
    +
    265 def SetDeepSeaPalette():
    +
    266  nRGBs = 9
    +
    267  stops = array(
    +
    268  'd', [0.0000, 0.1250, 0.2500, 0.3750, 0.5000, 0.6250, 0.7500, 0.8750, 1.0000])
    +
    269  red = array(
    +
    270  'd', reversed([0./255., 9./255., 13./255., 17./255., 24./255., 32./255., 27./255., 25./255., 29./255.]))
    +
    271  green = array(
    +
    272  'd', reversed([0./255., 0./255., 0./255., 2./255., 37./255., 74./255., 113./255., 160./255., 221./255.]))
    +
    273  blue = array(
    +
    274  'd', reversed([28./255., 42./255., 59./255., 78./255., 98./255., 129./255., 154./255., 184./255., 221./255.]))
    +
    275  R.TColor.CreateGradientColorTable(nRGBs, stops, red, green, blue, 255, 1)
    276 
    - -
    278  R.TColor.CreateGradientColorTable(3,
    -
    279  array ("d", [0.00, 0.50, 1.00]),
    -
    280  array ("d", [1.00, 1.00, 0.00]),
    -
    281  array ("d", [0.70, 1.00, 0.34]),
    -
    282  array ("d", [0.00, 1.00, 0.82]),
    -
    283  255, 1.0)
    -
    284 
    +
    277 
    +
    278 def SetCorrMatrixPalette():
    +
    279  R.TColor.CreateGradientColorTable(3,
    +
    280  array ("d", [0.00, 0.50, 1.00]),
    +
    281  array ("d", [1.00, 1.00, 0.00]),
    +
    282  array ("d", [0.70, 1.00, 0.34]),
    +
    283  array ("d", [0.00, 1.00, 0.82]),
    +
    284  255, 1.0)
    285 
    -
    286 def CreateTransparentColor(color, alpha):
    -
    287  adapt = R.gROOT.GetColor(color)
    -
    288  new_idx = R.gROOT.GetListOfColors().GetLast() + 1
    -
    289  trans = R.TColor(
    -
    290  new_idx, adapt.GetRed(), adapt.GetGreen(), adapt.GetBlue(), '', alpha)
    -
    291  COL_STORE.append(trans)
    -
    292  trans.SetName('userColor%i' % new_idx)
    -
    293  return new_idx
    -
    294 
    +
    286 
    +
    287 def CreateTransparentColor(color, alpha):
    +
    288  adapt = R.gROOT.GetColor(color)
    +
    289  new_idx = R.gROOT.GetListOfColors().GetLast() + 1
    +
    290  trans = R.TColor(
    +
    291  new_idx, adapt.GetRed(), adapt.GetGreen(), adapt.GetBlue(), '', alpha)
    +
    292  COL_STORE.append(trans)
    +
    293  trans.SetName('userColor%i' % new_idx)
    +
    294  return new_idx
    295 
    -
    296 def Set(obj, **kwargs):
    -
    297  for key, value in six.iteritems(kwargs):
    -
    298  if value is None:
    -
    299  getattr(obj, 'Set' + key)()
    -
    300  elif isinstance(value, (list, tuple)):
    -
    301  getattr(obj, 'Set' + key)(*value)
    -
    302  else:
    -
    303  getattr(obj, 'Set' + key)(value)
    -
    304 
    +
    296 
    +
    297 def Set(obj, **kwargs):
    +
    298  for key, value in six.iteritems(kwargs):
    +
    299  if value is None:
    +
    300  getattr(obj, 'Set' + key)()
    +
    301  elif isinstance(value, (list, tuple)):
    +
    302  getattr(obj, 'Set' + key)(*value)
    +
    303  else:
    +
    304  getattr(obj, 'Set' + key)(value)
    305 
    306 
    307 
    308 
    -
    313 
    -
    314 def OnePad():
    -
    315  pad = R.TPad('pad', 'pad', 0., 0., 1., 1.)
    -
    316  pad.Draw()
    -
    317  pad.cd()
    -
    318  result = [pad]
    -
    319  return result
    -
    320 
    +
    309 
    +
    314 
    +
    315 def OnePad():
    +
    316  pad = R.TPad('pad', 'pad', 0., 0., 1., 1.)
    +
    317  pad.Draw()
    +
    318  pad.cd()
    +
    319  result = [pad]
    +
    320  return result
    321 
    -
    322 def TwoPadSplit(split_point, gap_low, gap_high):
    -
    323  upper = R.TPad('upper', 'upper', 0., 0., 1., 1.)
    -
    324  upper.SetBottomMargin(split_point + gap_high)
    -
    325  upper.SetFillStyle(4000)
    -
    326  upper.Draw()
    -
    327  lower = R.TPad('lower', 'lower', 0., 0., 1., 1.)
    -
    328  lower.SetTopMargin(1 - split_point + gap_low)
    -
    329  lower.SetFillStyle(4000)
    -
    330  lower.Draw()
    -
    331  upper.cd()
    -
    332  result = [upper, lower]
    -
    333  return result
    -
    334 
    -
    335 def ThreePadSplit(upper_split_point, split_point, gap_low, gap_high):
    -
    336  upper2 = R.TPad('upper2', 'upper2', 0., 0., 1., 1.)
    -
    337  upper2.SetTopMargin(1 - upper_split_point)
    -
    338  upper2.SetBottomMargin(split_point + gap_high)
    -
    339  upper2.SetFillStyle(4000)
    -
    340  upper2.Draw()
    -
    341  upper1 = R.TPad('upper1', 'upper1', 0., 0., 1., 1.)
    -
    342  upper1.SetBottomMargin(upper_split_point)
    -
    343  upper1.SetFillStyle(4000)
    -
    344  upper1.Draw()
    -
    345  lower = R.TPad('lower', 'lower', 0., 0., 1., 1.)
    -
    346  lower.SetTopMargin(1 - split_point + gap_low)
    -
    347  lower.SetFillStyle(4000)
    -
    348  lower.Draw()
    -
    349  upper1.cd()
    -
    350  result = [upper1, lower, upper2]
    -
    351  return result
    -
    352 
    -
    353 def MultiRatioSplit(split_points, gaps_low, gaps_high):
    -
    354  """Create a set of TPads split vertically on the TCanvas
    -
    355 
    -
    356  This is a generalisation of the two pad main/ratio split but for the case
    -
    357  of multiple ratio pads.
    -
    358 
    -
    359  Args:
    -
    360 
    -
    361  split_points (list[float]): Height of each ratio pad as a fraction of the
    -
    362  canvas height. Pads will be created from the bottom of the frame
    -
    363  upwards. The final, main pad will occupy however much space remains,
    -
    364  therefore the size of this list should be [number of pads] - 1.
    -
    365  gaps_low (list[float]): Gaps between ratio pad frames created on the
    -
    366  lower pad side at each boundary. Give a list of zeroes for no gap
    -
    367  between pad frames. Should be the same length as `split_points`.1
    -
    368  gaps_high (list[float]): Gaps between ratio pad frames created on the
    -
    369  upper pad side at each boundary. Give a list of zeroes for no gap
    -
    370  between pad frames.
    -
    371 
    -
    372  Returns:
    -
    373  list[TPad]: List of TPads, indexed from top to bottom on the canvas.
    -
    374  """
    -
    375  pads = []
    -
    376  for i in range(len(split_points)+1):
    -
    377  pad = R.TPad('pad%i'%i, '', 0., 0., 1., 1.)
    -
    378  if i > 0:
    -
    379  pad.SetBottomMargin(sum(split_points[0:i])+gaps_high[i-1])
    -
    380  if i < len(split_points):
    -
    381  pad.SetTopMargin(1.-sum(split_points[0:i+1])+gaps_low[i])
    -
    382  pad.SetFillStyle(4000)
    -
    383  pad.Draw()
    -
    384  pads.append(pad)
    -
    385  pads.reverse()
    -
    386  return pads
    -
    387 
    +
    322 
    +
    323 def TwoPadSplit(split_point, gap_low, gap_high):
    +
    324  upper = R.TPad('upper', 'upper', 0., 0., 1., 1.)
    +
    325  upper.SetBottomMargin(split_point + gap_high)
    +
    326  upper.SetFillStyle(4000)
    +
    327  upper.Draw()
    +
    328  lower = R.TPad('lower', 'lower', 0., 0., 1., 1.)
    +
    329  lower.SetTopMargin(1 - split_point + gap_low)
    +
    330  lower.SetFillStyle(4000)
    +
    331  lower.Draw()
    +
    332  upper.cd()
    +
    333  result = [upper, lower]
    +
    334  return result
    +
    335 
    +
    336 def ThreePadSplit(upper_split_point, split_point, gap_low, gap_high):
    +
    337  upper2 = R.TPad('upper2', 'upper2', 0., 0., 1., 1.)
    +
    338  upper2.SetTopMargin(1 - upper_split_point)
    +
    339  upper2.SetBottomMargin(split_point + gap_high)
    +
    340  upper2.SetFillStyle(4000)
    +
    341  upper2.Draw()
    +
    342  upper1 = R.TPad('upper1', 'upper1', 0., 0., 1., 1.)
    +
    343  upper1.SetBottomMargin(upper_split_point)
    +
    344  upper1.SetFillStyle(4000)
    +
    345  upper1.Draw()
    +
    346  lower = R.TPad('lower', 'lower', 0., 0., 1., 1.)
    +
    347  lower.SetTopMargin(1 - split_point + gap_low)
    +
    348  lower.SetFillStyle(4000)
    +
    349  lower.Draw()
    +
    350  upper1.cd()
    +
    351  result = [upper1, lower, upper2]
    +
    352  return result
    +
    353 
    +
    354 def MultiRatioSplit(split_points, gaps_low, gaps_high):
    +
    355  """Create a set of TPads split vertically on the TCanvas
    +
    356 
    +
    357  This is a generalisation of the two pad main/ratio split but for the case
    +
    358  of multiple ratio pads.
    +
    359 
    +
    360  Args:
    +
    361 
    +
    362  split_points (list[float]): Height of each ratio pad as a fraction of the
    +
    363  canvas height. Pads will be created from the bottom of the frame
    +
    364  upwards. The final, main pad will occupy however much space remains,
    +
    365  therefore the size of this list should be [number of pads] - 1.
    +
    366  gaps_low (list[float]): Gaps between ratio pad frames created on the
    +
    367  lower pad side at each boundary. Give a list of zeroes for no gap
    +
    368  between pad frames. Should be the same length as `split_points`.1
    +
    369  gaps_high (list[float]): Gaps between ratio pad frames created on the
    +
    370  upper pad side at each boundary. Give a list of zeroes for no gap
    +
    371  between pad frames.
    +
    372 
    +
    373  Returns:
    +
    374  list[TPad]: List of TPads, indexed from top to bottom on the canvas.
    +
    375  """
    +
    376  pads = []
    +
    377  for i in range(len(split_points)+1):
    +
    378  pad = R.TPad('pad%i'%i, '', 0., 0., 1., 1.)
    +
    379  if i > 0:
    +
    380  pad.SetBottomMargin(sum(split_points[0:i])+gaps_high[i-1])
    +
    381  if i < len(split_points):
    +
    382  pad.SetTopMargin(1.-sum(split_points[0:i+1])+gaps_low[i])
    +
    383  pad.SetFillStyle(4000)
    +
    384  pad.Draw()
    +
    385  pads.append(pad)
    +
    386  pads.reverse()
    +
    387  return pads
    388 
    -
    389 def TwoPadSplitColumns(split_point, gap_left, gap_right):
    -
    390  left = R.TPad('left', 'left', 0., 0., 1., 1.)
    -
    391  left.SetRightMargin(1 - split_point + gap_right)
    -
    392  left.SetFillStyle(4000)
    -
    393  left.Draw()
    -
    394  right = R.TPad('right', 'right', 0., 0., 1., 1.)
    -
    395  right.SetLeftMargin(split_point + gap_left)
    -
    396  right.SetFillStyle(4000)
    -
    397  right.Draw()
    -
    398  left.cd()
    -
    399  result = [left, right]
    -
    400  return result
    -
    401 
    +
    389 
    +
    390 def TwoPadSplitColumns(split_point, gap_left, gap_right):
    +
    391  left = R.TPad('left', 'left', 0., 0., 1., 1.)
    +
    392  left.SetRightMargin(1 - split_point + gap_right)
    +
    393  left.SetFillStyle(4000)
    +
    394  left.Draw()
    +
    395  right = R.TPad('right', 'right', 0., 0., 1., 1.)
    +
    396  right.SetLeftMargin(split_point + gap_left)
    +
    397  right.SetFillStyle(4000)
    +
    398  right.Draw()
    +
    399  left.cd()
    +
    400  result = [left, right]
    +
    401  return result
    402 
    -
    403 def MultiRatioSplitColumns(split_points, gaps_left, gaps_right):
    -
    404  pads = []
    -
    405  for i in range(len(split_points)+1):
    -
    406  pad = R.TPad('pad%i'%i, '', 0., 0., 1., 1.)
    -
    407  if i > 0:
    -
    408  pad.SetLeftMargin(sum(split_points[0:i])+gaps_left[i-1])
    -
    409  if i < len(split_points):
    -
    410  pad.SetRightMargin(1.-sum(split_points[0:i+1])+gaps_right[i])
    -
    411  pad.SetFillStyle(4000)
    -
    412  pad.Draw()
    -
    413  pads.append(pad)
    -
    414  pads[0].cd()
    -
    415  # pads.reverse()
    -
    416  return pads
    -
    417 
    +
    403 
    +
    404 def MultiRatioSplitColumns(split_points, gaps_left, gaps_right):
    +
    405  pads = []
    +
    406  for i in range(len(split_points)+1):
    +
    407  pad = R.TPad('pad%i'%i, '', 0., 0., 1., 1.)
    +
    408  if i > 0:
    +
    409  pad.SetLeftMargin(sum(split_points[0:i])+gaps_left[i-1])
    +
    410  if i < len(split_points):
    +
    411  pad.SetRightMargin(1.-sum(split_points[0:i+1])+gaps_right[i])
    +
    412  pad.SetFillStyle(4000)
    +
    413  pad.Draw()
    +
    414  pads.append(pad)
    +
    415  pads[0].cd()
    +
    416  # pads.reverse()
    +
    417  return pads
    418 
    -
    419 def SetupTwoPadSplitAsRatio(pads, upper, lower, y_title, y_centered,
    -
    420  y_min, y_max):
    -
    421  if lower.GetXaxis().GetTitle() == '':
    -
    422  lower.GetXaxis().SetTitle(upper.GetXaxis().GetTitle())
    -
    423  upper.GetXaxis().SetTitle("")
    -
    424  upper.GetXaxis().SetLabelSize(0)
    -
    425  upper_h = 1. - pads[0].GetTopMargin() - pads[0].GetBottomMargin()
    -
    426  lower_h = 1. - pads[1].GetTopMargin() - pads[1].GetBottomMargin()
    -
    427  lower.GetYaxis().SetTickLength(R.gStyle.GetTickLength() * upper_h / lower_h)
    -
    428  pads[1].SetTickx(1)
    -
    429  pads[1].SetTicky(1)
    -
    430  lower.GetYaxis().SetTitle(y_title)
    -
    431  lower.GetYaxis().CenterTitle(y_centered)
    -
    432  if y_max > y_min:
    -
    433  lower.SetMinimum(y_min)
    -
    434  lower.SetMaximum(y_max)
    -
    435 
    +
    419 
    +
    420 def SetupTwoPadSplitAsRatio(pads, upper, lower, y_title, y_centered,
    +
    421  y_min, y_max):
    +
    422  if lower.GetXaxis().GetTitle() == '':
    +
    423  lower.GetXaxis().SetTitle(upper.GetXaxis().GetTitle())
    +
    424  upper.GetXaxis().SetTitle("")
    +
    425  upper.GetXaxis().SetLabelSize(0)
    +
    426  upper_h = 1. - pads[0].GetTopMargin() - pads[0].GetBottomMargin()
    +
    427  lower_h = 1. - pads[1].GetTopMargin() - pads[1].GetBottomMargin()
    +
    428  lower.GetYaxis().SetTickLength(R.gStyle.GetTickLength() * upper_h / lower_h)
    +
    429  pads[1].SetTickx(1)
    +
    430  pads[1].SetTicky(1)
    +
    431  lower.GetYaxis().SetTitle(y_title)
    +
    432  lower.GetYaxis().CenterTitle(y_centered)
    +
    433  if y_max > y_min:
    +
    434  lower.SetMinimum(y_min)
    +
    435  lower.SetMaximum(y_max)
    436 
    -
    437 def StandardAxes(xaxis, yaxis, var, units, fmt='.1f'):
    -
    438  width = xaxis.GetBinWidth(1)
    -
    439  w_label = ("%"+fmt) % width
    -
    440  if units == "":
    -
    441  xaxis.SetTitle(var)
    -
    442  yaxis.SetTitle("Events / " + w_label)
    -
    443  else:
    -
    444  xaxis.SetTitle(var + " (" + units + ")")
    -
    445  yaxis.SetTitle("Events / " + w_label + " " + units)
    -
    446 
    +
    437 
    +
    438 def StandardAxes(xaxis, yaxis, var, units, fmt='.1f'):
    +
    439  width = xaxis.GetBinWidth(1)
    +
    440  w_label = ("%"+fmt) % width
    +
    441  if units == "":
    +
    442  xaxis.SetTitle(var)
    +
    443  yaxis.SetTitle("Events / " + w_label)
    +
    444  else:
    +
    445  xaxis.SetTitle(var + " (" + units + ")")
    +
    446  yaxis.SetTitle("Events / " + w_label + " " + units)
    447 
    448 
    449 
    450 
    451 
    452 
    -
    459 
    -
    460 def CreateAxisHist(src, at_limits=True):
    -
    461  backup = R.gPad
    -
    462  tmp = R.TCanvas()
    -
    463  tmp.cd()
    -
    464  src.Draw('AP')
    -
    465  result = src.GetHistogram().Clone('tmp')
    -
    466  if (at_limits):
    -
    467  min = 0.
    -
    468  max = 0.
    -
    469  x = R.Double(0.)
    -
    470  y = R.Double(0.)
    -
    471  src.GetPoint(0, x, y)
    -
    472  min = float(x)
    -
    473  max = float(x)
    -
    474  for i in range(1, src.GetN()):
    -
    475  src.GetPoint(i, x, y)
    -
    476  if x < min:
    -
    477  min = float(x)
    -
    478  if x > max:
    -
    479  max = float(x)
    -
    480  result.GetXaxis().SetLimits(min, max)
    -
    481  R.gPad = backup
    -
    482  return result
    -
    483 
    +
    453 
    +
    460 
    +
    461 def CreateAxisHist(src, at_limits=True):
    +
    462  backup = R.gPad
    +
    463  tmp = R.TCanvas()
    +
    464  tmp.cd()
    +
    465  src.Draw('AP')
    +
    466  result = src.GetHistogram().Clone('tmp')
    +
    467  if (at_limits):
    +
    468  min = 0.
    +
    469  max = 0.
    +
    470  x = ctypes.c_double(0.)
    +
    471  y = ctypes.c_double(0.)
    +
    472  src.GetPoint(0, x, y)
    +
    473  min = float(x.value)
    +
    474  max = float(x.value)
    +
    475  for i in range(1, src.GetN()):
    +
    476  src.GetPoint(i, x, y)
    +
    477  if x < min:
    +
    478  min = float(x.value)
    +
    479  if x > max:
    +
    480  max = float(x.value)
    +
    481  result.GetXaxis().SetLimits(min, max)
    +
    482  R.gPad = backup
    +
    483  return result
    484 
    -
    485 def CreateAxisHists(n, src, at_limits):
    -
    486  res = []
    -
    487  h = CreateAxisHist(src, at_limits)
    -
    488  for i in range(n):
    -
    489  res.append(h.Clone('tmp%i'%i))
    -
    490  return res
    -
    491 
    +
    485 
    +
    486 def CreateAxisHists(n, src, at_limits):
    +
    487  res = []
    +
    488  h = CreateAxisHist(src, at_limits)
    +
    489  for i in range(n):
    +
    490  res.append(h.Clone('tmp%i'%i))
    +
    491  return res
    492 
    -
    493 def GetAxisHist(pad):
    -
    494  pad_obs = pad.GetListOfPrimitives()
    -
    495  if pad_obs is None:
    -
    496  return None
    -
    497  obj = None
    -
    498  for obj in pad_obs:
    -
    499  if obj.InheritsFrom(R.TH1.Class()):
    -
    500  return obj
    -
    501  if obj.InheritsFrom(R.TMultiGraph.Class()):
    -
    502  return obj.GetHistogram()
    -
    503  if obj.InheritsFrom(R.TGraph.Class()):
    -
    504  return obj.GetHistogram()
    -
    505  if obj.InheritsFrom(R.THStack.Class()):
    -
    506  return obj.GetHistogram()
    -
    507  return None
    -
    508 
    +
    493 
    +
    494 def GetAxisHist(pad):
    +
    495  pad_obs = pad.GetListOfPrimitives()
    +
    496  if pad_obs is None:
    +
    497  return None
    +
    498  obj = None
    +
    499  for obj in pad_obs:
    +
    500  if obj.InheritsFrom(R.TH1.Class()):
    +
    501  return obj
    +
    502  if obj.InheritsFrom(R.TMultiGraph.Class()):
    +
    503  return obj.GetHistogram()
    +
    504  if obj.InheritsFrom(R.TGraph.Class()):
    +
    505  return obj.GetHistogram()
    +
    506  if obj.InheritsFrom(R.THStack.Class()):
    +
    507  return obj.GetHistogram()
    +
    508  return None
    509 
    510 
    511 
    512 
    -
    516 
    -
    517 def TFileIsGood(filename):
    -
    518  """Performs a series of tests on a TFile to ensure that it can be opened
    -
    519  without errors
    -
    520 
    -
    521  Args:
    -
    522  filename: `str` The name of the TFile to check
    -
    523 
    -
    524  Returns:
    -
    525  `bool` True if the file can opened, is not a zombie, and if ROOT did
    -
    526  not need to try and recover the contents
    -
    527  """
    -
    528  fin = R.TFile(filename)
    -
    529  if not fin:
    -
    530  return False
    -
    531  if fin and not fin.IsOpen():
    -
    532  return False
    -
    533  elif fin and fin.IsOpen() and fin.IsZombie():
    -
    534  fin.Close()
    -
    535  return False
    -
    536  elif fin and fin.IsOpen() and fin.TestBit(R.TFile.kRecovered):
    -
    537  fin.Close()
    -
    538  # don't consider a recovered file to be OK
    -
    539  return False
    -
    540  else:
    -
    541  fin.Close()
    -
    542  return True
    -
    543 
    +
    513 
    +
    517 
    +
    518 def TFileIsGood(filename):
    +
    519  """Performs a series of tests on a TFile to ensure that it can be opened
    +
    520  without errors
    +
    521 
    +
    522  Args:
    +
    523  filename: `str` The name of the TFile to check
    +
    524 
    +
    525  Returns:
    +
    526  `bool` True if the file can opened, is not a zombie, and if ROOT did
    +
    527  not need to try and recover the contents
    +
    528  """
    +
    529  fin = R.TFile(filename)
    +
    530  if not fin:
    +
    531  return False
    +
    532  if fin and not fin.IsOpen():
    +
    533  return False
    +
    534  elif fin and fin.IsOpen() and fin.IsZombie():
    +
    535  fin.Close()
    +
    536  return False
    +
    537  elif fin and fin.IsOpen() and fin.TestBit(R.TFile.kRecovered):
    +
    538  fin.Close()
    +
    539  # don't consider a recovered file to be OK
    +
    540  return False
    +
    541  else:
    +
    542  fin.Close()
    +
    543  return True
    544 
    -
    545 def MakeTChain(files, tree):
    -
    546  chain = R.TChain(tree)
    -
    547  for f in files:
    -
    548  chain.Add(f)
    -
    549  return chain
    -
    550 
    +
    545 
    +
    546 def MakeTChain(files, tree):
    +
    547  chain = R.TChain(tree)
    +
    548  for f in files:
    +
    549  chain.Add(f)
    +
    550  return chain
    551 
    -
    552 def Get(file, obj):
    -
    553  R.TH1.AddDirectory(False)
    -
    554  f_in = R.TFile(file)
    -
    555  res = R.gDirectory.Get(obj)
    -
    556  f_in.Close()
    -
    557  return res
    -
    558 
    +
    552 
    +
    553 def Get(file, obj):
    +
    554  R.TH1.AddDirectory(False)
    +
    555  f_in = R.TFile(file)
    +
    556  res = R.gDirectory.Get(obj)
    +
    557  f_in.Close()
    +
    558  return res
    559 
    -
    560 def ParamFromFilename(filename, param):
    -
    561  if len(re.findall(param + '\.\d+\.\d+', filename)):
    -
    562  num1 = re.findall(
    -
    563  param + '\.\d+\.\d+', filename)[0].replace(param + '.', '')
    -
    564  return float(num1)
    -
    565  elif len(re.findall(param + '\.\d+', filename)):
    -
    566  num1 = re.findall(param + '\.\d+', filename)[0].replace(param + '.', '')
    -
    567  return int(num1)
    -
    568  else:
    -
    569  print("Error: parameter " + param + " not found in filename")
    -
    570 
    +
    560 
    +
    561 def ParamFromFilename(filename, param):
    +
    562  if len(re.findall(param + '\.\d+\.\d+', filename)):
    +
    563  num1 = re.findall(
    +
    564  param + '\.\d+\.\d+', filename)[0].replace(param + '.', '')
    +
    565  return float(num1)
    +
    566  elif len(re.findall(param + '\.\d+', filename)):
    +
    567  num1 = re.findall(param + '\.\d+', filename)[0].replace(param + '.', '')
    +
    568  return int(num1)
    +
    569  else:
    +
    570  print("Error: parameter " + param + " not found in filename")
    571 
    572 
    573 
    574 
    575 
    -
    580 
    -
    581 def TGraphFromTree(tree, xvar, yvar, selection):
    -
    582  tree.Draw(xvar + ':' + yvar, selection, 'goff')
    -
    583  gr = R.TGraph(tree.GetSelectedRows(), tree.GetV1(), tree.GetV2())
    -
    584  return gr
    -
    585 
    +
    576 
    +
    581 
    +
    582 def TGraphFromTree(tree, xvar, yvar, selection):
    +
    583  tree.Draw(xvar + ':' + yvar, selection, 'goff')
    +
    584  gr = R.TGraph(tree.GetSelectedRows(), tree.GetV1(), tree.GetV2())
    +
    585  return gr
    586 
    -
    587 def TGraph2DFromTree(tree, xvar, yvar, zvar, selection):
    -
    588  tree.Draw(xvar + ':' + yvar + ':' + zvar, selection, 'goff')
    -
    589  gr = R.TGraph2D(
    -
    590  tree.GetSelectedRows(), tree.GetV1(), tree.GetV2(), tree.GetV3())
    -
    591  return gr
    -
    592 
    +
    587 
    +
    588 def TGraph2DFromTree(tree, xvar, yvar, zvar, selection):
    +
    589  tree.Draw(xvar + ':' + yvar + ':' + zvar, selection, 'goff')
    +
    590  gr = R.TGraph2D(
    +
    591  tree.GetSelectedRows(), tree.GetV1(), tree.GetV2(), tree.GetV3())
    +
    592  return gr
    593 
    -
    594 def RocCurveFrom1DHists(h_x, h_y, cut_is_greater_than):
    -
    595  backup = R.TH1.AddDirectoryStatus()
    -
    596  R.TH1.AddDirectory(False)
    -
    597  x_den = h_x.Clone()
    -
    598  x_num = h_x.Clone()
    -
    599  x_err = R.Double(0.)
    -
    600  x_int = h_x.IntegralAndError(0, h_x.GetNbinsX() + 1, x_err)
    -
    601  for i in range(1, h_x.GetNbinsX() + 1):
    -
    602  x_part_err = R.Double(0.)
    -
    603  x_part_int = h_x.IntegralAndError(i, h_x.GetNbinsX(
    -
    604  ) + 1, x_part_err) if cut_is_greater_than else h_x.IntegralAndError(0, i, x_part_err)
    -
    605  x_den.SetBinContent(i, x_int)
    -
    606  x_den.SetBinError(i, x_err)
    -
    607  x_num.SetBinContent(i, x_part_int)
    -
    608  x_num.SetBinError(i, x_part_err)
    -
    609  y_den = h_y.Clone()
    -
    610  y_num = h_y.Clone()
    -
    611  y_err = R.Double(0.)
    -
    612  y_int = h_y.IntegralAndError(0, h_y.GetNbinsX() + 1, y_err)
    -
    613  for i in range(1, h_y.GetNbinsX() + 1):
    -
    614  y_part_err = R.Double(0.)
    -
    615  y_part_int = h_y.IntegralAndError(i, h_y.GetNbinsX(
    -
    616  ) + 1, y_part_err) if cut_is_greater_than else h_y.IntegralAndError(0, i, y_part_err)
    -
    617  y_den.SetBinContent(i, y_int)
    -
    618  y_den.SetBinError(i, y_err)
    -
    619  y_num.SetBinContent(i, y_part_int)
    -
    620  y_num.SetBinError(i, y_part_err)
    -
    621  # x_den.Print('all')
    -
    622  # x_num.Print('all')
    -
    623  # y_den.Print('all')
    -
    624  # y_num.Print('all')
    -
    625  x_gr = R.TGraphAsymmErrors(x_num, x_den)
    -
    626  y_gr = R.TGraphAsymmErrors(y_num, y_den)
    -
    627 
    -
    628  res = y_gr.Clone()
    -
    629  for i in range(0, res.GetN()):
    -
    630  res.GetX()[i] = x_gr.GetY()[i]
    -
    631  res.GetEXlow()[i] = x_gr.GetEYlow()[i]
    -
    632  res.GetEXhigh()[i] = x_gr.GetEYhigh()[i]
    -
    633  res.Sort()
    -
    634  R.TH1.AddDirectory(backup)
    -
    635  return res
    -
    636 
    +
    594 
    +
    595 def RocCurveFrom1DHists(h_x, h_y, cut_is_greater_than):
    +
    596  backup = R.TH1.AddDirectoryStatus()
    +
    597  R.TH1.AddDirectory(False)
    +
    598  x_den = h_x.Clone()
    +
    599  x_num = h_x.Clone()
    +
    600  x_err = ctypes.c_double(0.)
    +
    601  x_int = h_x.IntegralAndError(0, h_x.GetNbinsX() + 1, x_err)
    +
    602  for i in range(1, h_x.GetNbinsX() + 1):
    +
    603  x_part_err = ctypes.c_double(0.)
    +
    604  x_part_int = h_x.IntegralAndError(i, h_x.GetNbinsX(
    +
    605  ) + 1, x_part_err) if cut_is_greater_than else h_x.IntegralAndError(0, i, x_part_err)
    +
    606  x_den.SetBinContent(i, x_int)
    +
    607  x_den.SetBinError(i, x_err)
    +
    608  x_num.SetBinContent(i, x_part_int)
    +
    609  x_num.SetBinError(i, x_part_err)
    +
    610  y_den = h_y.Clone()
    +
    611  y_num = h_y.Clone()
    +
    612  y_err = ctypes.c_double(0.)
    +
    613  y_int = h_y.IntegralAndError(0, h_y.GetNbinsX() + 1, y_err)
    +
    614  for i in range(1, h_y.GetNbinsX() + 1):
    +
    615  y_part_err = ctypes.c_double(0.)
    +
    616  y_part_int = h_y.IntegralAndError(i, h_y.GetNbinsX(
    +
    617  ) + 1, y_part_err) if cut_is_greater_than else h_y.IntegralAndError(0, i, y_part_err)
    +
    618  y_den.SetBinContent(i, y_int)
    +
    619  y_den.SetBinError(i, y_err)
    +
    620  y_num.SetBinContent(i, y_part_int)
    +
    621  y_num.SetBinError(i, y_part_err)
    +
    622  # x_den.Print('all')
    +
    623  # x_num.Print('all')
    +
    624  # y_den.Print('all')
    +
    625  # y_num.Print('all')
    +
    626  x_gr = R.TGraphAsymmErrors(x_num, x_den)
    +
    627  y_gr = R.TGraphAsymmErrors(y_num, y_den)
    +
    628 
    +
    629  res = y_gr.Clone()
    +
    630  for i in range(0, res.GetN()):
    +
    631  res.GetX()[i] = x_gr.GetY()[i]
    +
    632  res.GetEXlow()[i] = x_gr.GetEYlow()[i]
    +
    633  res.GetEXhigh()[i] = x_gr.GetEYhigh()[i]
    +
    634  res.Sort()
    +
    635  R.TH1.AddDirectory(backup)
    +
    636  return res
    637 
    -
    638 def TH2FromTGraph2D(graph, method='BinEdgeAligned',
    -
    639  force_x_width=None,
    -
    640  force_y_width=None):
    -
    641  """Build an empty TH2 from the set of points in a TGraph2D
    -
    642 
    -
    643  There is no unique way to define a TH2 binning given an arbitrary
    -
    644  TGraph2D, therefore this function supports multiple named methods:
    -
    645 
    -
    646  - `BinEdgeAligned` simply takes the sets of x- and y- values in the
    -
    647  TGraph2D and uses these as the bin edge arrays in the TH2. The
    -
    648  implication of this is that when filling the bin contents interpolation
    -
    649  will be required when evaluating the TGraph2D at the bin centres.
    -
    650  - `BinCenterAligned` will try to have the TGraph2D points at the bin
    -
    651  centers, but this will only work completely correctly when the input
    -
    652  point spacing is regular. The algorithm first identifies the bin width
    -
    653  as the smallest interval between points on each axis. The start
    -
    654  position of the TH2 axis is then defined as the lowest value in the
    -
    655  TGraph2D minus half this width, and the axis continues with regular
    -
    656  bins until the graph maximum is passed.
    -
    657 
    -
    658  Args:
    -
    659  graph (TGraph2D): Should have at least two unique x and y values,
    -
    660  otherwise we can't define any bins
    -
    661  method (str): The binning algorithm to use
    -
    662  force_x_width (bool): Override the derived x-axis bin width in the
    -
    663  CenterAligned method
    -
    664  force_y_width (bool): Override the derived y-axis bin width in the
    -
    665  CenterAligned method
    -
    666 
    -
    667  Raises:
    -
    668  RuntimeError: If the method name is not recognised
    -
    669 
    -
    670  Returns:
    -
    671  TH2F: The exact binning of the TH2F depends on the chosen method
    -
    672  """
    -
    673  x_vals = set()
    -
    674  y_vals = set()
    -
    675 
    -
    676  for i in range(graph.GetN()):
    -
    677  x_vals.add(graph.GetX()[i])
    -
    678  y_vals.add(graph.GetY()[i])
    -
    679 
    -
    680  x_vals = sorted(x_vals)
    -
    681  y_vals = sorted(y_vals)
    -
    682  if method == 'BinEdgeAligned':
    -
    683  h_proto = R.TH2F('prototype', '',
    -
    684  len(x_vals) - 1, array('d', x_vals),
    -
    685  len(y_vals) - 1, array('d', y_vals))
    -
    686  elif method == 'BinCenterAligned':
    -
    687  x_widths = []
    -
    688  y_widths = []
    -
    689  for i in range(1, len(x_vals)):
    -
    690  x_widths.append(x_vals[i] - x_vals[i - 1])
    -
    691  for i in range(1, len(y_vals)):
    -
    692  y_widths.append(y_vals[i] - y_vals[i - 1])
    -
    693  x_min = min(x_widths) if force_x_width is None else force_x_width
    -
    694  y_min = min(y_widths) if force_y_width is None else force_y_width
    -
    695  x_bins = int(((x_vals[-1] - (x_vals[0] - 0.5 * x_min)) / x_min) + 0.5)
    -
    696  y_bins = int(((y_vals[-1] - (y_vals[0] - 0.5 * y_min)) / y_min) + 0.5)
    -
    697  print('[TH2FromTGraph2D] x-axis binning: (%i, %g, %g)' % (x_bins, x_vals[0] - 0.5 * x_min, x_vals[0] - 0.5 * x_min + x_bins * x_min))
    -
    698  print('[TH2FromTGraph2D] y-axis binning: (%i, %g, %g)' % (y_bins, y_vals[0] - 0.5 * y_min, y_vals[0] - 0.5 * y_min + y_bins * y_min))
    -
    699  # Use a number slightly smaller than 0.49999 because the TGraph2D interpolation
    -
    700  # is fussy about evaluating on the boundary
    -
    701  h_proto = R.TH2F('prototype', '',
    -
    702  x_bins, x_vals[
    -
    703  0] - 0.49999 * x_min, x_vals[0] - 0.50001 * x_min + x_bins * x_min,
    -
    704  y_bins, y_vals[0] - 0.49999 * y_min, y_vals[0] - 0.50001 * y_min + y_bins * y_min)
    -
    705  else:
    -
    706  raise RuntimeError(
    -
    707  '[TH2FromTGraph2D] Method %s not supported' % method)
    -
    708  h_proto.SetDirectory(0)
    -
    709  return h_proto
    -
    710 
    +
    638 
    +
    639 def TH2FromTGraph2D(graph, method='BinEdgeAligned',
    +
    640  force_x_width=None,
    +
    641  force_y_width=None):
    +
    642  """Build an empty TH2 from the set of points in a TGraph2D
    +
    643 
    +
    644  There is no unique way to define a TH2 binning given an arbitrary
    +
    645  TGraph2D, therefore this function supports multiple named methods:
    +
    646 
    +
    647  - `BinEdgeAligned` simply takes the sets of x- and y- values in the
    +
    648  TGraph2D and uses these as the bin edge arrays in the TH2. The
    +
    649  implication of this is that when filling the bin contents interpolation
    +
    650  will be required when evaluating the TGraph2D at the bin centres.
    +
    651  - `BinCenterAligned` will try to have the TGraph2D points at the bin
    +
    652  centers, but this will only work completely correctly when the input
    +
    653  point spacing is regular. The algorithm first identifies the bin width
    +
    654  as the smallest interval between points on each axis. The start
    +
    655  position of the TH2 axis is then defined as the lowest value in the
    +
    656  TGraph2D minus half this width, and the axis continues with regular
    +
    657  bins until the graph maximum is passed.
    +
    658 
    +
    659  Args:
    +
    660  graph (TGraph2D): Should have at least two unique x and y values,
    +
    661  otherwise we can't define any bins
    +
    662  method (str): The binning algorithm to use
    +
    663  force_x_width (bool): Override the derived x-axis bin width in the
    +
    664  CenterAligned method
    +
    665  force_y_width (bool): Override the derived y-axis bin width in the
    +
    666  CenterAligned method
    +
    667 
    +
    668  Raises:
    +
    669  RuntimeError: If the method name is not recognised
    +
    670 
    +
    671  Returns:
    +
    672  TH2F: The exact binning of the TH2F depends on the chosen method
    +
    673  """
    +
    674  x_vals = set()
    +
    675  y_vals = set()
    +
    676 
    +
    677  for i in range(graph.GetN()):
    +
    678  x_vals.add(graph.GetX()[i])
    +
    679  y_vals.add(graph.GetY()[i])
    +
    680 
    +
    681  x_vals = sorted(x_vals)
    +
    682  y_vals = sorted(y_vals)
    +
    683  if method == 'BinEdgeAligned':
    +
    684  h_proto = R.TH2F('prototype', '',
    +
    685  len(x_vals) - 1, array('d', x_vals),
    +
    686  len(y_vals) - 1, array('d', y_vals))
    +
    687  elif method == 'BinCenterAligned':
    +
    688  x_widths = []
    +
    689  y_widths = []
    +
    690  for i in range(1, len(x_vals)):
    +
    691  x_widths.append(x_vals[i] - x_vals[i - 1])
    +
    692  for i in range(1, len(y_vals)):
    +
    693  y_widths.append(y_vals[i] - y_vals[i - 1])
    +
    694  x_min = min(x_widths) if force_x_width is None else force_x_width
    +
    695  y_min = min(y_widths) if force_y_width is None else force_y_width
    +
    696  x_bins = int(((x_vals[-1] - (x_vals[0] - 0.5 * x_min)) / x_min) + 0.5)
    +
    697  y_bins = int(((y_vals[-1] - (y_vals[0] - 0.5 * y_min)) / y_min) + 0.5)
    +
    698  print('[TH2FromTGraph2D] x-axis binning: (%i, %g, %g)' % (x_bins, x_vals[0] - 0.5 * x_min, x_vals[0] - 0.5 * x_min + x_bins * x_min))
    +
    699  print('[TH2FromTGraph2D] y-axis binning: (%i, %g, %g)' % (y_bins, y_vals[0] - 0.5 * y_min, y_vals[0] - 0.5 * y_min + y_bins * y_min))
    +
    700  # Use a number slightly smaller than 0.49999 because the TGraph2D interpolation
    +
    701  # is fussy about evaluating on the boundary
    +
    702  h_proto = R.TH2F('prototype', '',
    +
    703  x_bins, x_vals[
    +
    704  0] - 0.49999 * x_min, x_vals[0] - 0.50001 * x_min + x_bins * x_min,
    +
    705  y_bins, y_vals[0] - 0.49999 * y_min, y_vals[0] - 0.50001 * y_min + y_bins * y_min)
    +
    706  else:
    +
    707  raise RuntimeError(
    +
    708  '[TH2FromTGraph2D] Method %s not supported' % method)
    +
    709  h_proto.SetDirectory(0)
    +
    710  return h_proto
    711 
    -
    712 def MakeErrorBand(LowerGraph, UpperGraph):
    -
    713  errorBand = R.TGraphAsymmErrors()
    -
    714  lower_list = []
    -
    715  upper_list = []
    -
    716  for i in range(LowerGraph.GetN()):
    -
    717  lower_list.append(
    -
    718  (float(LowerGraph.GetX()[i]), float(LowerGraph.GetY()[i])))
    -
    719  upper_list.append(
    -
    720  (float(UpperGraph.GetX()[i]), float(UpperGraph.GetY()[i])))
    -
    721  lower_list = sorted(set(lower_list))
    -
    722  upper_list = sorted(set(upper_list))
    -
    723  for i in range(LowerGraph.GetN()):
    -
    724  errorBand.SetPoint(i, lower_list[i][0], lower_list[i][1])
    -
    725  errorBand.SetPointEYlow(i, lower_list[i][1] - lower_list[i][1])
    -
    726  errorBand.SetPointEYhigh(i, upper_list[i][1] - lower_list[i][1])
    -
    727  return errorBand
    -
    728 
    +
    712 
    +
    713 def MakeErrorBand(LowerGraph, UpperGraph):
    +
    714  errorBand = R.TGraphAsymmErrors()
    +
    715  lower_list = []
    +
    716  upper_list = []
    +
    717  for i in range(LowerGraph.GetN()):
    +
    718  lower_list.append(
    +
    719  (float(LowerGraph.GetX()[i]), float(LowerGraph.GetY()[i])))
    +
    720  upper_list.append(
    +
    721  (float(UpperGraph.GetX()[i]), float(UpperGraph.GetY()[i])))
    +
    722  lower_list = sorted(set(lower_list))
    +
    723  upper_list = sorted(set(upper_list))
    +
    724  for i in range(LowerGraph.GetN()):
    +
    725  errorBand.SetPoint(i, lower_list[i][0], lower_list[i][1])
    +
    726  errorBand.SetPointEYlow(i, lower_list[i][1] - lower_list[i][1])
    +
    727  errorBand.SetPointEYhigh(i, upper_list[i][1] - lower_list[i][1])
    +
    728  return errorBand
    729 
    -
    730 def LimitTGraphFromJSON(js, label):
    -
    731  xvals = []
    -
    732  yvals = []
    -
    733  for key in js:
    -
    734  xvals.append(float(key))
    -
    735  yvals.append(js[key][label])
    -
    736  graph = R.TGraph(len(xvals), array('d', xvals), array('d', yvals))
    -
    737  graph.Sort()
    -
    738  return graph
    -
    739 
    +
    730 
    +
    731 def LimitTGraphFromJSON(js, label):
    +
    732  xvals = []
    +
    733  yvals = []
    +
    734  for key in js:
    +
    735  xvals.append(float(key))
    +
    736  yvals.append(js[key][label])
    +
    737  graph = R.TGraph(len(xvals), array('d', xvals), array('d', yvals))
    +
    738  graph.Sort()
    +
    739  return graph
    740 
    -
    741 def LimitTGraphFromJSONFile(jsfile, label):
    -
    742  with open(jsfile) as jsonfile:
    -
    743  js = json.load(jsonfile)
    -
    744  return LimitTGraphFromJSON(js, label)
    -
    745 
    -
    746 def ToyTGraphFromJSON(js, label):
    -
    747  xvals = []
    -
    748  yvals = []
    -
    749  if isinstance(label,(str,)):
    -
    750  for entry in js[label]:
    -
    751  xvals.append(float(entry))
    -
    752  yvals.append(1.0)
    -
    753  else:
    -
    754  if len(label) == 1:
    -
    755  return ToyTGraphFromJSON(js,label[0])
    -
    756  else:
    -
    757  return ToyTGraphFromJSON(js[label[0]],label[1:])
    -
    758  graph = R.TGraph(len(xvals), array('d', xvals), array('d', yvals))
    -
    759  graph.Sort()
    -
    760  return graph
    -
    761  # hist = R.TH1F("toy", "toy", 100, min(xvals), max(xvals))
    -
    762  # for xval in xvals:
    -
    763  # hist.AddBinContent(hist.GetXaxis().FindBin(xval))
    -
    764  # return hist
    -
    765 
    +
    741 
    +
    742 def LimitTGraphFromJSONFile(jsfile, label):
    +
    743  with open(jsfile) as jsonfile:
    +
    744  js = json.load(jsonfile)
    +
    745  return LimitTGraphFromJSON(js, label)
    +
    746 
    +
    747 def ToyTGraphFromJSON(js, label):
    +
    748  xvals = []
    +
    749  yvals = []
    +
    750  if isinstance(label,(str,)):
    +
    751  for entry in js[label]:
    +
    752  xvals.append(float(entry))
    +
    753  yvals.append(1.0)
    +
    754  else:
    +
    755  if len(label) == 1:
    +
    756  return ToyTGraphFromJSON(js,label[0])
    +
    757  else:
    +
    758  return ToyTGraphFromJSON(js[label[0]],label[1:])
    +
    759  graph = R.TGraph(len(xvals), array('d', xvals), array('d', yvals))
    +
    760  graph.Sort()
    +
    761  return graph
    +
    762  # hist = R.TH1F("toy", "toy", 100, min(xvals), max(xvals))
    +
    763  # for xval in xvals:
    +
    764  # hist.AddBinContent(hist.GetXaxis().FindBin(xval))
    +
    765  # return hist
    766 
    767 
    -
    768 def ToyTGraphFromJSONFile(jsfile, label):
    -
    769  with open(jsfile) as jsonfile:
    -
    770  js = json.load(jsonfile)
    -
    771  return ToyTGraphFromJSON(js, label)
    -
    772 
    -
    773 def LimitBandTGraphFromJSON(js, central, lo, hi):
    -
    774  xvals = []
    -
    775  yvals = []
    -
    776  yvals_lo = []
    -
    777  yvals_hi = []
    -
    778  for key in js:
    -
    779  xvals.append(float(key))
    -
    780  yvals.append(js[key][central])
    -
    781  yvals_lo.append(js[key][central] - js[key][lo])
    -
    782  yvals_hi.append(js[key][hi] - js[key][central])
    -
    783  graph = R.TGraphAsymmErrors(len(xvals), array('d', xvals), array('d', yvals), array(
    -
    784  'd', [0]), array('d', [0]), array('d', yvals_lo), array('d', yvals_hi))
    -
    785  graph.Sort()
    -
    786  return graph
    -
    787 
    +
    768 
    +
    769 def ToyTGraphFromJSONFile(jsfile, label):
    +
    770  with open(jsfile) as jsonfile:
    +
    771  js = json.load(jsonfile)
    +
    772  return ToyTGraphFromJSON(js, label)
    +
    773 
    +
    774 def LimitBandTGraphFromJSON(js, central, lo, hi):
    +
    775  xvals = []
    +
    776  yvals = []
    +
    777  yvals_lo = []
    +
    778  yvals_hi = []
    +
    779  for key in js:
    +
    780  xvals.append(float(key))
    +
    781  yvals.append(js[key][central])
    +
    782  yvals_lo.append(js[key][central] - js[key][lo])
    +
    783  yvals_hi.append(js[key][hi] - js[key][central])
    +
    784  graph = R.TGraphAsymmErrors(len(xvals), array('d', xvals), array('d', yvals), array(
    +
    785  'd', [0]), array('d', [0]), array('d', yvals_lo), array('d', yvals_hi))
    +
    786  graph.Sort()
    +
    787  return graph
    788 
    -
    789 def StandardLimitsFromJSONFile(json_file, draw=['obs', 'exp0', 'exp1', 'exp2']):
    -
    790  graphs = {}
    -
    791  data = {}
    -
    792  with open(json_file) as jsonfile:
    -
    793  data = json.load(jsonfile)
    -
    794  if 'obs' in draw:
    -
    795  graphs['obs'] = LimitTGraphFromJSON(data, 'obs')
    -
    796  if 'exp0' in draw or 'exp' in draw:
    -
    797  graphs['exp0'] = LimitTGraphFromJSON(data, 'exp0')
    -
    798  if 'exp1' in draw or 'exp' in draw:
    -
    799  graphs['exp1'] = LimitBandTGraphFromJSON(data, 'exp0', 'exp-1', 'exp+1')
    -
    800  if 'exp2' in draw or 'exp' in draw:
    -
    801  graphs['exp2'] = LimitBandTGraphFromJSON(data, 'exp0', 'exp-2', 'exp+2')
    -
    802  return graphs
    -
    803 
    +
    789 
    +
    790 def StandardLimitsFromJSONFile(json_file, draw=['obs', 'exp0', 'exp1', 'exp2']):
    +
    791  graphs = {}
    +
    792  data = {}
    +
    793  with open(json_file) as jsonfile:
    +
    794  data = json.load(jsonfile)
    +
    795  if 'obs' in draw:
    +
    796  graphs['obs'] = LimitTGraphFromJSON(data, 'obs')
    +
    797  if 'exp0' in draw or 'exp' in draw:
    +
    798  graphs['exp0'] = LimitTGraphFromJSON(data, 'exp0')
    +
    799  if 'exp1' in draw or 'exp' in draw:
    +
    800  graphs['exp1'] = LimitBandTGraphFromJSON(data, 'exp0', 'exp-1', 'exp+1')
    +
    801  if 'exp2' in draw or 'exp' in draw:
    +
    802  graphs['exp2'] = LimitBandTGraphFromJSON(data, 'exp0', 'exp-2', 'exp+2')
    +
    803  return graphs
    804 
    -
    805 def bestFit(tree, x, y, cut):
    -
    806  nfind = tree.Draw(y + ":" + x, cut + "deltaNLL == 0")
    -
    807  gr0 = R.TGraph(1)
    -
    808  if (nfind == 0):
    -
    809  gr0.SetPoint(0, -999, -999)
    -
    810  else:
    -
    811  grc = R.gROOT.FindObject("Graph").Clone()
    -
    812  if (grc.GetN() > 1):
    -
    813  grc.Set(1)
    -
    814  gr0.SetPoint(0, grc.GetXmax(), grc.GetYmax())
    -
    815  gr0.SetMarkerStyle(34)
    -
    816  gr0.SetMarkerSize(2.0)
    -
    817  return gr0
    -
    818 
    +
    805 
    +
    806 def bestFit(tree, x, y, cut):
    +
    807  nfind = tree.Draw(y + ":" + x, cut + "deltaNLL == 0")
    +
    808  gr0 = R.TGraph(1)
    +
    809  if (nfind == 0):
    +
    810  gr0.SetPoint(0, -999, -999)
    +
    811  else:
    +
    812  grc = R.gROOT.FindObject("Graph").Clone()
    +
    813  if (grc.GetN() > 1):
    +
    814  grc.Set(1)
    +
    815  gr0.SetPoint(0, grc.GetXmax(), grc.GetYmax())
    +
    816  gr0.SetMarkerStyle(34)
    +
    817  gr0.SetMarkerSize(2.0)
    +
    818  return gr0
    819 
    -
    820 def treeToHist2D(t, x, y, name, cut, xmin, xmax, ymin, ymax, xbins, ybins):
    -
    821  t.Draw("2*deltaNLL:%s:%s>>%s_prof(%d,%10g,%10g,%d,%10g,%10g)" %
    -
    822  (y, x, name, xbins, xmin, xmax, ybins, ymin, ymax), cut + "deltaNLL != 0", "PROF")
    -
    823  prof = R.gROOT.FindObject(name + "_prof")
    -
    824  h2d = R.TH2D(name, name, xbins, xmin, xmax, ybins, ymin, ymax)
    -
    825  for ix in range(1, xbins + 1):
    -
    826  for iy in range(1, ybins + 1):
    -
    827  z = prof.GetBinContent(ix, iy)
    -
    828  if (z != z) or (z > 4294967295): # protect against NANs
    -
    829  z = 0
    -
    830  h2d.SetBinContent(ix, iy, z)
    -
    831  h2d.GetXaxis().SetTitle(x)
    -
    832  h2d.GetYaxis().SetTitle(y)
    -
    833  h2d.SetDirectory(0)
    -
    834  h2d = NewInterpolate(h2d)
    -
    835  return h2d
    -
    836 
    +
    820 
    +
    821 def treeToHist2D(t, x, y, name, cut, xmin, xmax, ymin, ymax, xbins, ybins):
    +
    822  t.Draw("2*deltaNLL:%s:%s>>%s_prof(%d,%10g,%10g,%d,%10g,%10g)" %
    +
    823  (y, x, name, xbins, xmin, xmax, ybins, ymin, ymax), cut + "deltaNLL != 0", "PROF")
    +
    824  prof = R.gROOT.FindObject(name + "_prof")
    +
    825  h2d = R.TH2D(name, name, xbins, xmin, xmax, ybins, ymin, ymax)
    +
    826  for ix in range(1, xbins + 1):
    +
    827  for iy in range(1, ybins + 1):
    +
    828  z = prof.GetBinContent(ix, iy)
    +
    829  if (z != z) or (z > 4294967295): # protect against NANs
    +
    830  z = 0
    +
    831  h2d.SetBinContent(ix, iy, z)
    +
    832  h2d.GetXaxis().SetTitle(x)
    +
    833  h2d.GetYaxis().SetTitle(y)
    +
    834  h2d.SetDirectory(0)
    +
    835  h2d = NewInterpolate(h2d)
    +
    836  return h2d
    837 
    -
    838 def makeHist1D(name, xbins, graph, scaleXrange=1.0, absoluteXrange=None):
    -
    839  len_x = graph.GetX()[graph.GetN() - 1] - graph.GetX()[0]
    -
    840  binw_x = (len_x * 0.5 / (float(xbins) - 1.)) - 1E-5
    -
    841  if absoluteXrange:
    -
    842  hist = R.TH1F(name, '', xbins, absoluteXrange[0], absoluteXrange[1])
    -
    843  else:
    -
    844  hist = R.TH1F(
    -
    845  name, '', xbins, graph.GetX()[0], scaleXrange * (graph.GetX()[graph.GetN() - 1] + binw_x))
    -
    846  return hist
    -
    847 
    +
    838 
    +
    839 def makeHist1D(name, xbins, graph, scaleXrange=1.0, absoluteXrange=None):
    +
    840  len_x = graph.GetX()[graph.GetN() - 1] - graph.GetX()[0]
    +
    841  binw_x = (len_x * 0.5 / (float(xbins) - 1.)) - 1E-5
    +
    842  if absoluteXrange:
    +
    843  hist = R.TH1F(name, '', xbins, absoluteXrange[0], absoluteXrange[1])
    +
    844  else:
    +
    845  hist = R.TH1F(
    +
    846  name, '', xbins, graph.GetX()[0], scaleXrange * (graph.GetX()[graph.GetN() - 1] + binw_x))
    +
    847  return hist
    848 
    -
    849 def makeHist2D(name, xbins, ybins, graph2d):
    -
    850  len_x = graph2d.GetXmax() - graph2d.GetXmin()
    -
    851  binw_x = (len_x * 0.5 / (float(xbins) - 1.)) - 1E-5
    -
    852  len_y = graph2d.GetYmax() - graph2d.GetYmin()
    -
    853  binw_y = (len_y * 0.5 / (float(ybins) - 1.)) - 1E-5
    -
    854  hist = R.TH2F(name, '', xbins, graph2d.GetXmin() - binw_x, graph2d.GetXmax() +
    -
    855  binw_x, ybins, graph2d.GetYmin() - binw_y, graph2d.GetYmax() + binw_y)
    -
    856  return hist
    -
    857 
    +
    849 
    +
    850 def makeHist2D(name, xbins, ybins, graph2d):
    +
    851  len_x = graph2d.GetXmax() - graph2d.GetXmin()
    +
    852  binw_x = (len_x * 0.5 / (float(xbins) - 1.)) - 1E-5
    +
    853  len_y = graph2d.GetYmax() - graph2d.GetYmin()
    +
    854  binw_y = (len_y * 0.5 / (float(ybins) - 1.)) - 1E-5
    +
    855  hist = R.TH2F(name, '', xbins, graph2d.GetXmin() - binw_x, graph2d.GetXmax() +
    +
    856  binw_x, ybins, graph2d.GetYmin() - binw_y, graph2d.GetYmax() + binw_y)
    +
    857  return hist
    858 
    -
    859 def makeVarBinHist2D(name, xbins, ybins):
    -
    860  # create new arrays in which bin low edge is adjusted to make measured
    -
    861  # points at the bin centres
    -
    862  xbins_new = [None] * (len(xbins) + 1)
    -
    863  for i in range(len(xbins) - 1):
    -
    864  if i == 0 or i == 1:
    -
    865  xbins_new[i] = xbins[i] - ((xbins[i + 1] - xbins[i]) / 2) + 1E-5
    -
    866  else:
    -
    867  xbins_new[i] = xbins[i] - ((xbins[i + 1] - xbins[i]) / 2)
    -
    868  xbins_new[len(xbins) - 1] = xbins[len(xbins) - 2] + \
    -
    869  ((xbins[len(xbins) - 2] - xbins[len(xbins) - 3]) / 2)
    -
    870  xbins_new[len(xbins)] = xbins[len(xbins) - 1] + \
    -
    871  ((xbins[len(xbins) - 1] - xbins[len(xbins) - 2]) / 2) - 1E-5
    -
    872 
    -
    873  ybins_new = [None] * (len(ybins) + 1)
    -
    874  for i in range(len(ybins) - 1):
    -
    875  if i == 0 or i == 1:
    -
    876  ybins_new[i] = ybins[i] - ((ybins[i + 1] - ybins[i]) / 2) + 1E-5
    -
    877  else:
    -
    878  ybins_new[i] = ybins[i] - ((ybins[i + 1] - ybins[i]) / 2)
    -
    879  ybins_new[len(ybins) - 1] = ybins[len(ybins) - 2] + \
    -
    880  ((ybins[len(ybins) - 2] - ybins[len(ybins) - 3]) / 2)
    -
    881  ybins_new[len(ybins)] = ybins[len(ybins) - 1] + \
    -
    882  ((ybins[len(ybins) - 1] - ybins[len(ybins) - 2]) / 2) - 1E-5
    -
    883  hist = R.TH2F(name, '', len(
    -
    884  xbins_new) - 1, array('d', xbins_new), len(ybins_new) - 1, array('d', ybins_new))
    -
    885  return hist
    -
    886 
    +
    859 
    +
    860 def makeVarBinHist2D(name, xbins, ybins):
    +
    861  # create new arrays in which bin low edge is adjusted to make measured
    +
    862  # points at the bin centres
    +
    863  xbins_new = [None] * (len(xbins) + 1)
    +
    864  for i in range(len(xbins) - 1):
    +
    865  if i == 0 or i == 1:
    +
    866  xbins_new[i] = xbins[i] - ((xbins[i + 1] - xbins[i]) / 2) + 1E-5
    +
    867  else:
    +
    868  xbins_new[i] = xbins[i] - ((xbins[i + 1] - xbins[i]) / 2)
    +
    869  xbins_new[len(xbins) - 1] = xbins[len(xbins) - 2] + \
    +
    870  ((xbins[len(xbins) - 2] - xbins[len(xbins) - 3]) / 2)
    +
    871  xbins_new[len(xbins)] = xbins[len(xbins) - 1] + \
    +
    872  ((xbins[len(xbins) - 1] - xbins[len(xbins) - 2]) / 2) - 1E-5
    +
    873 
    +
    874  ybins_new = [None] * (len(ybins) + 1)
    +
    875  for i in range(len(ybins) - 1):
    +
    876  if i == 0 or i == 1:
    +
    877  ybins_new[i] = ybins[i] - ((ybins[i + 1] - ybins[i]) / 2) + 1E-5
    +
    878  else:
    +
    879  ybins_new[i] = ybins[i] - ((ybins[i + 1] - ybins[i]) / 2)
    +
    880  ybins_new[len(ybins) - 1] = ybins[len(ybins) - 2] + \
    +
    881  ((ybins[len(ybins) - 2] - ybins[len(ybins) - 3]) / 2)
    +
    882  ybins_new[len(ybins)] = ybins[len(ybins) - 1] + \
    +
    883  ((ybins[len(ybins) - 1] - ybins[len(ybins) - 2]) / 2) - 1E-5
    +
    884  hist = R.TH2F(name, '', len(
    +
    885  xbins_new) - 1, array('d', xbins_new), len(ybins_new) - 1, array('d', ybins_new))
    +
    886  return hist
    887 
    -
    888 def GraphDifference(graph1,graph2,relative):
    -
    889  xvals =[]
    -
    890  yvals =[]
    -
    891  if graph1.GetN() != graph2.GetN():
    -
    892  return graph1
    -
    893  for i in range(graph1.GetN()):
    -
    894  xvals.append(graph1.GetX()[i])
    -
    895  if relative :
    -
    896  yvals.append(2*abs(graph1.GetY()[i]-graph2.GetY()[i])/(graph1.GetY()[i]+graph2.GetY()[i]))
    -
    897  else:
    -
    898  yvals.append(2*(graph1.GetY()[i]-graph2.GetY()[i])/(graph1.GetY()[i]+graph2.GetY()[i]))
    -
    899  diff_graph = R.TGraph(len(xvals),array('d',xvals),array('d',yvals))
    -
    900  diff_graph.Sort()
    -
    901  return diff_graph
    -
    902 
    +
    888 
    +
    889 def GraphDifference(graph1,graph2,relative):
    +
    890  xvals =[]
    +
    891  yvals =[]
    +
    892  if graph1.GetN() != graph2.GetN():
    +
    893  return graph1
    +
    894  for i in range(graph1.GetN()):
    +
    895  xvals.append(graph1.GetX()[i])
    +
    896  if relative :
    +
    897  yvals.append(2*abs(graph1.GetY()[i]-graph2.GetY()[i])/(graph1.GetY()[i]+graph2.GetY()[i]))
    +
    898  else:
    +
    899  yvals.append(2*(graph1.GetY()[i]-graph2.GetY()[i])/(graph1.GetY()[i]+graph2.GetY()[i]))
    +
    900  diff_graph = R.TGraph(len(xvals),array('d',xvals),array('d',yvals))
    +
    901  diff_graph.Sort()
    +
    902  return diff_graph
    903 
    -
    904 def GraphDivide(num, den):
    -
    905  res = num.Clone()
    -
    906  for i in range(num.GetN()):
    -
    907  res.GetY()[i] = res.GetY()[i]/den.Eval(res.GetX()[i])
    -
    908  if type(res) is R.TGraphAsymmErrors:
    -
    909  for i in range(num.GetN()):
    -
    910  res.GetEYhigh()[i] = res.GetEYhigh()[i]/den.Eval(res.GetX()[i])
    -
    911  res.GetEYlow()[i] = res.GetEYlow()[i]/den.Eval(res.GetX()[i])
    -
    912 
    -
    913  return res
    -
    914 
    +
    904 
    +
    905 def GraphDivide(num, den):
    +
    906  res = num.Clone()
    +
    907  for i in range(num.GetN()):
    +
    908  res.GetY()[i] = res.GetY()[i]/den.Eval(res.GetX()[i])
    +
    909  if type(res) is R.TGraphAsymmErrors:
    +
    910  for i in range(num.GetN()):
    +
    911  res.GetEYhigh()[i] = res.GetEYhigh()[i]/den.Eval(res.GetX()[i])
    +
    912  res.GetEYlow()[i] = res.GetEYlow()[i]/den.Eval(res.GetX()[i])
    +
    913 
    +
    914  return res
    915 
    -
    916 def MakeRatioHist(num, den, num_err, den_err):
    -
    917  """Make a new ratio TH1 from numerator and denominator TH1s with optional
    -
    918  error propagation
    -
    919 
    -
    920  Args:
    -
    921  num (TH1): Numerator histogram
    -
    922  den (TH1): Denominator histogram
    -
    923  num_err (bool): Propagate the error in the numerator TH1
    -
    924  den_err (bool): Propagate the error in the denominator TH1
    -
    925 
    -
    926  Returns:
    -
    927  TH1: A new TH1 containing the ratio
    -
    928  """
    -
    929  result = num.Clone()
    -
    930  if not num_err:
    -
    931  for i in range(1, result.GetNbinsX()+1):
    -
    932  result.SetBinError(i, 0.)
    -
    933  den_fix = den.Clone()
    -
    934  if not den_err:
    -
    935  for i in range(1, den_fix.GetNbinsX()+1):
    -
    936  den_fix.SetBinError(i, 0.)
    -
    937  result.Divide(den_fix)
    -
    938  return result
    -
    939 
    +
    916 
    +
    917 def MakeRatioHist(num, den, num_err, den_err):
    +
    918  """Make a new ratio TH1 from numerator and denominator TH1s with optional
    +
    919  error propagation
    +
    920 
    +
    921  Args:
    +
    922  num (TH1): Numerator histogram
    +
    923  den (TH1): Denominator histogram
    +
    924  num_err (bool): Propagate the error in the numerator TH1
    +
    925  den_err (bool): Propagate the error in the denominator TH1
    +
    926 
    +
    927  Returns:
    +
    928  TH1: A new TH1 containing the ratio
    +
    929  """
    +
    930  result = num.Clone()
    +
    931  if not num_err:
    +
    932  for i in range(1, result.GetNbinsX()+1):
    +
    933  result.SetBinError(i, 0.)
    +
    934  den_fix = den.Clone()
    +
    935  if not den_err:
    +
    936  for i in range(1, den_fix.GetNbinsX()+1):
    +
    937  den_fix.SetBinError(i, 0.)
    +
    938  result.Divide(den_fix)
    +
    939  return result
    940 
    941 
    942 
    - -
    948  i = 0
    -
    949  while i < graph.GetN() - 1:
    -
    950  if graph.GetX()[i + 1] == graph.GetX()[i]:
    -
    951  # print 'Removing duplicate point (%f, %f)' % (graph.GetX()[i+1], graph.GetY()[i+1])
    -
    952  graph.RemovePoint(i + 1)
    -
    953  else:
    -
    954  i += 1
    -
    955 
    +
    943 
    +
    948 def RemoveGraphXDuplicates(graph):
    +
    949  i = 0
    +
    950  while i < graph.GetN() - 1:
    +
    951  if graph.GetX()[i + 1] == graph.GetX()[i]:
    +
    952  # print 'Removing duplicate point (%f, %f)' % (graph.GetX()[i+1], graph.GetY()[i+1])
    +
    953  graph.RemovePoint(i + 1)
    +
    954  else:
    +
    955  i += 1
    956 
    -
    957 def ApplyGraphYOffset(graph, y_off):
    -
    958  for i in range(graph.GetN() - 1):
    -
    959  graph.GetY()[i] = graph.GetY()[i] + y_off
    -
    960 
    +
    957 
    +
    958 def ApplyGraphYOffset(graph, y_off):
    +
    959  for i in range(graph.GetN() - 1):
    +
    960  graph.GetY()[i] = graph.GetY()[i] + y_off
    961 
    -
    962 def RemoveGraphYAll(graph, val):
    -
    963  for i in range(graph.GetN()):
    -
    964  if graph.GetY()[i] == val:
    -
    965  print('[RemoveGraphYAll] Removing point (%f, %f)' % (graph.GetX()[i], graph.GetY()[i]))
    -
    966  graph.RemovePoint(i)
    -
    967  RemoveGraphYAll(graph, val)
    -
    968  break
    -
    969 
    +
    962 
    +
    963 def RemoveGraphYAll(graph, val):
    +
    964  for i in range(graph.GetN()):
    +
    965  if graph.GetY()[i] == val:
    +
    966  print('[RemoveGraphYAll] Removing point (%f, %f)' % (graph.GetX()[i], graph.GetY()[i]))
    +
    967  graph.RemovePoint(i)
    +
    968  RemoveGraphYAll(graph, val)
    +
    969  break
    970 
    -
    971 def RemoveSmallDelta(graph, val):
    -
    972  for i in range(graph.GetN()):
    -
    973  diff = abs(graph.GetY()[i])
    -
    974  if diff < val:
    -
    975  print('[RemoveSmallDelta] Removing point (%f, %f)' % (graph.GetX()[i], graph.GetY()[i]))
    -
    976  graph.RemovePoint(i)
    -
    977  RemoveSmallDelta(graph, val)
    -
    978  break
    -
    979 
    +
    971 
    +
    972 def RemoveSmallDelta(graph, val):
    +
    973  for i in range(graph.GetN()):
    +
    974  diff = abs(graph.GetY()[i])
    +
    975  if diff < val:
    +
    976  print('[RemoveSmallDelta] Removing point (%f, %f)' % (graph.GetX()[i], graph.GetY()[i]))
    +
    977  graph.RemovePoint(i)
    +
    978  RemoveSmallDelta(graph, val)
    +
    979  break
    980 
    -
    981 def RemoveGraphYAbove(graph, val):
    -
    982  for i in range(graph.GetN()):
    -
    983  if graph.GetY()[i] > val:
    -
    984  # print 'Removing point (%f, %f)' % (graph.GetX()[i],
    -
    985  # graph.GetY()[i])
    -
    986  graph.RemovePoint(i)
    -
    987  RemoveGraphYAbove(graph, val)
    -
    988  break
    -
    989 
    +
    981 
    +
    982 def RemoveGraphYAbove(graph, val):
    +
    983  for i in range(graph.GetN()):
    +
    984  if graph.GetY()[i] > val:
    +
    985  # print 'Removing point (%f, %f)' % (graph.GetX()[i],
    +
    986  # graph.GetY()[i])
    +
    987  graph.RemovePoint(i)
    +
    988  RemoveGraphYAbove(graph, val)
    +
    989  break
    990 
    -
    991 def SetMinToZero(graph):
    -
    992  min = 999.
    -
    993  minNum = -1
    -
    994  for i in range(graph.GetN()):
    -
    995  if graph.GetY()[i] < min :
    -
    996  min = graph.GetY()[i]
    -
    997  minNum = i
    -
    998  for i in range(graph.GetN()):
    -
    999  graph.SetPoint(i, graph.GetX()[i], graph.GetY()[i]-min)
    -
    1000 
    +
    991 
    +
    992 def SetMinToZero(graph):
    +
    993  min = 999.
    +
    994  minNum = -1
    +
    995  for i in range(graph.GetN()):
    +
    996  if graph.GetY()[i] < min :
    +
    997  min = graph.GetY()[i]
    +
    998  minNum = i
    +
    999  for i in range(graph.GetN()):
    +
    1000  graph.SetPoint(i, graph.GetX()[i], graph.GetY()[i]-min)
    1001 
    1002 
    -
    1003 def ImproveMinimum(graph, func, doIt=False):
    -
    1004  fit_x = 0.
    -
    1005  fit_y = 999.
    -
    1006  fit_i = 0
    -
    1007  for i in range(graph.GetN()):
    -
    1008  if graph.GetY()[i] < fit_y:
    -
    1009  fit_i = i
    -
    1010  fit_x = graph.GetX()[i]
    -
    1011  fit_y = graph.GetY()[i]
    -
    1012  if fit_i == 0 or fit_i == (graph.GetN() - 1):
    -
    1013  if doIt:
    -
    1014  min_x = graph.GetX()[fit_i]
    -
    1015  min_y = graph.GetY()[fit_i]
    -
    1016  for i in range(graph.GetN()):
    -
    1017  before = graph.GetY()[i]
    -
    1018  graph.GetY()[i] -= min_y
    -
    1019  after = graph.GetY()[i]
    -
    1020  print('Point %i, before=%f, after=%f' % (i, before, after))
    -
    1021  return (fit_x, fit_y)
    -
    1022  search_min = fit_i - 2 if fit_i >= 2 else fit_i - 1
    -
    1023  search_max = fit_i + 2 if fit_i + 2 < graph.GetN() else fit_i + 1
    -
    1024  min_x = func.GetMinimumX(graph.GetX()[search_min], graph.GetX()[search_max])
    -
    1025  min_y = func.Eval(min_x)
    -
    1026  print('[ImproveMinimum] Fit minimum was (%f, %f)' % (fit_x, fit_y))
    -
    1027  print('[ImproveMinimum] Better minimum was (%f, %f)' % (min_x, min_y))
    -
    1028  if doIt:
    -
    1029  for i in range(graph.GetN()):
    -
    1030  before = graph.GetY()[i]
    -
    1031  graph.GetY()[i] -= min_y
    -
    1032  after = graph.GetY()[i]
    -
    1033  print('Point %i, before=%f, after=%f' % (i, before, after))
    -
    1034  graph.Set(graph.GetN() + 1)
    -
    1035  graph.SetPoint(graph.GetN() - 1, min_x, 0)
    -
    1036  graph.Sort()
    -
    1037  return (min_x, min_y)
    -
    1038 
    +
    1003 
    +
    1004 def ImproveMinimum(graph, func, doIt=False):
    +
    1005  fit_x = 0.
    +
    1006  fit_y = 999.
    +
    1007  fit_i = 0
    +
    1008  for i in range(graph.GetN()):
    +
    1009  if graph.GetY()[i] < fit_y:
    +
    1010  fit_i = i
    +
    1011  fit_x = graph.GetX()[i]
    +
    1012  fit_y = graph.GetY()[i]
    +
    1013  if fit_i == 0 or fit_i == (graph.GetN() - 1):
    +
    1014  if doIt:
    +
    1015  min_x = graph.GetX()[fit_i]
    +
    1016  min_y = graph.GetY()[fit_i]
    +
    1017  for i in range(graph.GetN()):
    +
    1018  before = graph.GetY()[i]
    +
    1019  graph.GetY()[i] -= min_y
    +
    1020  after = graph.GetY()[i]
    +
    1021  print('Point %i, before=%f, after=%f' % (i, before, after))
    +
    1022  return (fit_x, fit_y)
    +
    1023  search_min = fit_i - 2 if fit_i >= 2 else fit_i - 1
    +
    1024  search_max = fit_i + 2 if fit_i + 2 < graph.GetN() else fit_i + 1
    +
    1025  min_x = func.GetMinimumX(graph.GetX()[search_min], graph.GetX()[search_max])
    +
    1026  min_y = func.Eval(min_x)
    +
    1027  print('[ImproveMinimum] Fit minimum was (%f, %f)' % (fit_x, fit_y))
    +
    1028  print('[ImproveMinimum] Better minimum was (%f, %f)' % (min_x, min_y))
    +
    1029  if doIt:
    +
    1030  for i in range(graph.GetN()):
    +
    1031  before = graph.GetY()[i]
    +
    1032  graph.GetY()[i] -= min_y
    +
    1033  after = graph.GetY()[i]
    +
    1034  print('Point %i, before=%f, after=%f' % (i, before, after))
    +
    1035  graph.Set(graph.GetN() + 1)
    +
    1036  graph.SetPoint(graph.GetN() - 1, min_x, 0)
    +
    1037  graph.Sort()
    +
    1038  return (min_x, min_y)
    1039 
    -
    1040 def FindCrossingsWithSpline(graph, func, yval):
    -
    1041  crossings = []
    -
    1042  intervals = []
    -
    1043  current = None
    -
    1044  for i in range(graph.GetN() - 1):
    -
    1045  if (graph.GetY()[i] - yval) * (graph.GetY()[i + 1] - yval) < 0.:
    -
    1046  cross = func.GetX(yval, graph.GetX()[i], graph.GetX()[i + 1])
    -
    1047  if (graph.GetY()[i] - yval) > 0. and current is None:
    -
    1048  current = {
    -
    1049  'lo': cross,
    -
    1050  'hi': graph.GetX()[graph.GetN() - 1],
    -
    1051  'valid_lo': True,
    -
    1052  'valid_hi': False
    -
    1053  }
    -
    1054  if (graph.GetY()[i] - yval) < 0. and current is None:
    -
    1055  current = {
    -
    1056  'lo': graph.GetX()[0],
    -
    1057  'hi': cross,
    -
    1058  'valid_lo': False,
    -
    1059  'valid_hi': True
    -
    1060  }
    -
    1061  intervals.append(current)
    -
    1062  current = None
    -
    1063  if (graph.GetY()[i] - yval) < 0. and current is not None:
    -
    1064  current['hi'] = cross
    -
    1065  current['valid_hi'] = True
    -
    1066  intervals.append(current)
    -
    1067  current = None
    -
    1068  # print 'Crossing between: (%f, %f) -> (%f, %f) at %f' %
    -
    1069  # (graph.GetX()[i], graph.GetY()[i], graph.GetX()[i+1],
    -
    1070  # graph.GetY()[i+1], cross)
    -
    1071  crossings.append(cross)
    -
    1072  if current is not None:
    -
    1073  intervals.append(current)
    -
    1074  if len(intervals) == 0:
    -
    1075  current = {
    -
    1076  'lo': graph.GetX()[0],
    -
    1077  'hi': graph.GetX()[graph.GetN() - 1],
    -
    1078  'valid_lo': False,
    -
    1079  'valid_hi': False
    -
    1080  }
    -
    1081  intervals.append(current)
    -
    1082  print(intervals)
    -
    1083  return intervals
    -
    1084  # return crossings
    -
    1085 
    +
    1040 
    +
    1041 def FindCrossingsWithSpline(graph, func, yval):
    +
    1042  crossings = []
    +
    1043  intervals = []
    +
    1044  current = None
    +
    1045  for i in range(graph.GetN() - 1):
    +
    1046  if (graph.GetY()[i] - yval) * (graph.GetY()[i + 1] - yval) < 0.:
    +
    1047  cross = func.GetX(yval, graph.GetX()[i], graph.GetX()[i + 1])
    +
    1048  if (graph.GetY()[i] - yval) > 0. and current is None:
    +
    1049  current = {
    +
    1050  'lo': cross,
    +
    1051  'hi': graph.GetX()[graph.GetN() - 1],
    +
    1052  'valid_lo': True,
    +
    1053  'valid_hi': False
    +
    1054  }
    +
    1055  if (graph.GetY()[i] - yval) < 0. and current is None:
    +
    1056  current = {
    +
    1057  'lo': graph.GetX()[0],
    +
    1058  'hi': cross,
    +
    1059  'valid_lo': False,
    +
    1060  'valid_hi': True
    +
    1061  }
    +
    1062  intervals.append(current)
    +
    1063  current = None
    +
    1064  if (graph.GetY()[i] - yval) < 0. and current is not None:
    +
    1065  current['hi'] = cross
    +
    1066  current['valid_hi'] = True
    +
    1067  intervals.append(current)
    +
    1068  current = None
    +
    1069  # print 'Crossing between: (%f, %f) -> (%f, %f) at %f' %
    +
    1070  # (graph.GetX()[i], graph.GetY()[i], graph.GetX()[i+1],
    +
    1071  # graph.GetY()[i+1], cross)
    +
    1072  crossings.append(cross)
    +
    1073  if current is not None:
    +
    1074  intervals.append(current)
    +
    1075  if len(intervals) == 0:
    +
    1076  current = {
    +
    1077  'lo': graph.GetX()[0],
    +
    1078  'hi': graph.GetX()[graph.GetN() - 1],
    +
    1079  'valid_lo': False,
    +
    1080  'valid_hi': False
    +
    1081  }
    +
    1082  intervals.append(current)
    +
    1083  print(intervals)
    +
    1084  return intervals
    +
    1085  # return crossings
    1086 
    -
    1087 def ReZeroTGraph(gr, doIt=False):
    -
    1088  fit_x = 0.
    -
    1089  fit_y = 0.
    -
    1090  for i in range(gr.GetN()):
    -
    1091  if gr.GetY()[i] == 0.:
    -
    1092  fit_x = gr.GetX()[i]
    -
    1093  fit_y = gr.GetY()[i]
    -
    1094  break
    -
    1095  min_x = 0.
    -
    1096  min_y = 0.
    -
    1097  for i in range(gr.GetN()):
    -
    1098  if gr.GetY()[i] < min_y:
    -
    1099  min_y = gr.GetY()[i]
    -
    1100  min_x = gr.GetX()[i]
    -
    1101  if min_y < fit_y:
    -
    1102  print('[ReZeroTGraph] Fit minimum was (%f, %f)' % (fit_x, fit_y))
    -
    1103  print('[ReZeroTGraph] Better minimum was (%f, %f)' % (min_x, min_y))
    -
    1104  if doIt:
    -
    1105  for i in range(gr.GetN()):
    -
    1106  before = gr.GetY()[i]
    -
    1107  gr.GetY()[i] -= min_y
    -
    1108  after = gr.GetY()[i]
    -
    1109  # print 'Point %i, before=%f, after=%f' % (i, before, after)
    -
    1110  return min_y
    -
    1111 
    -
    1112 def FilterGraph(gr, n=3):
    -
    1113  counter = 0
    -
    1114  remove_list = []
    -
    1115  for i in range(gr.GetN()):
    -
    1116  if gr.GetY()[i] == 0.:
    -
    1117  continue
    -
    1118  if counter % n < (n - 1):
    -
    1119  remove_list.append(i)
    -
    1120  counter += 1
    -
    1121 
    -
    1122  for i in reversed(remove_list):
    -
    1123  gr.RemovePoint(i)
    -
    1124 
    +
    1087 
    +
    1088 def ReZeroTGraph(gr, doIt=False):
    +
    1089  fit_x = 0.
    +
    1090  fit_y = 0.
    +
    1091  for i in range(gr.GetN()):
    +
    1092  if gr.GetY()[i] == 0.:
    +
    1093  fit_x = gr.GetX()[i]
    +
    1094  fit_y = gr.GetY()[i]
    +
    1095  break
    +
    1096  min_x = 0.
    +
    1097  min_y = 0.
    +
    1098  for i in range(gr.GetN()):
    +
    1099  if gr.GetY()[i] < min_y:
    +
    1100  min_y = gr.GetY()[i]
    +
    1101  min_x = gr.GetX()[i]
    +
    1102  if min_y < fit_y:
    +
    1103  print('[ReZeroTGraph] Fit minimum was (%f, %f)' % (fit_x, fit_y))
    +
    1104  print('[ReZeroTGraph] Better minimum was (%f, %f)' % (min_x, min_y))
    +
    1105  if doIt:
    +
    1106  for i in range(gr.GetN()):
    +
    1107  before = gr.GetY()[i]
    +
    1108  gr.GetY()[i] -= min_y
    +
    1109  after = gr.GetY()[i]
    +
    1110  # print 'Point %i, before=%f, after=%f' % (i, before, after)
    +
    1111  return min_y
    +
    1112 
    +
    1113 def FilterGraph(gr, n=3):
    +
    1114  counter = 0
    +
    1115  remove_list = []
    +
    1116  for i in range(gr.GetN()):
    +
    1117  if gr.GetY()[i] == 0.:
    +
    1118  continue
    +
    1119  if counter % n < (n - 1):
    +
    1120  remove_list.append(i)
    +
    1121  counter += 1
    +
    1122 
    +
    1123  for i in reversed(remove_list):
    +
    1124  gr.RemovePoint(i)
    1125 
    -
    1126 def RemoveInXRange(gr, xmin=0, xmax=1):
    -
    1127  remove_list = []
    -
    1128  for i in range(gr.GetN()):
    -
    1129  if gr.GetY()[i] == 0.:
    -
    1130  continue
    -
    1131  if gr.GetX()[i] > xmin and gr.GetX()[i] < xmax:
    -
    1132  remove_list.append(i)
    -
    1133 
    -
    1134  for i in reversed(remove_list):
    -
    1135  gr.RemovePoint(i)
    -
    1136 
    +
    1126 
    +
    1127 def RemoveInXRange(gr, xmin=0, xmax=1):
    +
    1128  remove_list = []
    +
    1129  for i in range(gr.GetN()):
    +
    1130  if gr.GetY()[i] == 0.:
    +
    1131  continue
    +
    1132  if gr.GetX()[i] > xmin and gr.GetX()[i] < xmax:
    +
    1133  remove_list.append(i)
    +
    1134 
    +
    1135  for i in reversed(remove_list):
    +
    1136  gr.RemovePoint(i)
    1137 
    -
    1138 def RemoveNearMin(graph, val, spacing=None):
    -
    1139  # assume graph is sorted:
    -
    1140  n = graph.GetN()
    -
    1141  if n < 5:
    -
    1142  return
    -
    1143  if spacing is None:
    -
    1144  spacing = (graph.GetX()[n - 1] - graph.GetX()[0]) / float(n - 2)
    -
    1145  # print '[RemoveNearMin] Graph has spacing of %.3f' % spacing
    -
    1146  bf_i = None
    -
    1147  for i in range(graph.GetN()):
    -
    1148  if graph.GetY()[i] == 0.:
    -
    1149  bf = graph.GetX()[i]
    -
    1150  bf_i = i
    -
    1151  # print '[RemoveNearMin] Found best-fit at %.3f' % bf
    -
    1152  break
    -
    1153  if bf_i is None:
    -
    1154  print('[RemoveNearMin] No minimum found!')
    -
    1155  return
    -
    1156  for i in range(graph.GetN()):
    -
    1157  if i == bf_i:
    -
    1158  continue
    -
    1159  if abs(graph.GetX()[i] - bf) < (val * spacing):
    -
    1160  print('[RemoveNearMin] Removing point (%f, %f) close to minimum at %f' % (graph.GetX()[i], graph.GetY()[i], bf))
    -
    1161  graph.RemovePoint(i)
    -
    1162  RemoveNearMin(graph, val, spacing)
    -
    1163  break
    -
    1164 
    +
    1138 
    +
    1139 def RemoveNearMin(graph, val, spacing=None):
    +
    1140  # assume graph is sorted:
    +
    1141  n = graph.GetN()
    +
    1142  if n < 5:
    +
    1143  return
    +
    1144  if spacing is None:
    +
    1145  spacing = (graph.GetX()[n - 1] - graph.GetX()[0]) / float(n - 2)
    +
    1146  # print '[RemoveNearMin] Graph has spacing of %.3f' % spacing
    +
    1147  bf_i = None
    +
    1148  for i in range(graph.GetN()):
    +
    1149  if graph.GetY()[i] == 0.:
    +
    1150  bf = graph.GetX()[i]
    +
    1151  bf_i = i
    +
    1152  # print '[RemoveNearMin] Found best-fit at %.3f' % bf
    +
    1153  break
    +
    1154  if bf_i is None:
    +
    1155  print('[RemoveNearMin] No minimum found!')
    +
    1156  return
    +
    1157  for i in range(graph.GetN()):
    +
    1158  if i == bf_i:
    +
    1159  continue
    +
    1160  if abs(graph.GetX()[i] - bf) < (val * spacing):
    +
    1161  print('[RemoveNearMin] Removing point (%f, %f) close to minimum at %f' % (graph.GetX()[i], graph.GetY()[i], bf))
    +
    1162  graph.RemovePoint(i)
    +
    1163  RemoveNearMin(graph, val, spacing)
    +
    1164  break
    1165 
    -
    1166 def SortGraph(Graph):
    -
    1167  sortedGraph = R.TGraph()
    -
    1168  graph_list = []
    -
    1169  for i in range(Graph.GetN()):
    -
    1170  graph_list.append((float(Graph.GetX()[i]), float(Graph.GetY()[i])))
    -
    1171  graph_list = sorted(set(graph_list))
    -
    1172  for i in range(Graph.GetN()):
    -
    1173  sortedGraph.SetPoint(i, graph_list[i][0], graph_list[i][1])
    -
    1174  return sortedGraph
    -
    1175 
    +
    1166 
    +
    1167 def SortGraph(Graph):
    +
    1168  sortedGraph = R.TGraph()
    +
    1169  graph_list = []
    +
    1170  for i in range(Graph.GetN()):
    +
    1171  graph_list.append((float(Graph.GetX()[i]), float(Graph.GetY()[i])))
    +
    1172  graph_list = sorted(set(graph_list))
    +
    1173  for i in range(Graph.GetN()):
    +
    1174  sortedGraph.SetPoint(i, graph_list[i][0], graph_list[i][1])
    +
    1175  return sortedGraph
    1176 
    1177 
    1178 
    1179 
    1180 
    -
    1186 def FixTopRange(pad, fix_y, fraction):
    -
    1187  hobj = GetAxisHist(pad)
    -
    1188  ymin = hobj.GetMinimum()
    -
    1189  hobj.SetMaximum((fix_y - fraction * ymin) / (1. - fraction))
    -
    1190  if R.gPad.GetLogy():
    -
    1191  if ymin == 0.:
    -
    1192  print('Cannot adjust log-scale y-axis range if the minimum is zero!')
    -
    1193  return
    -
    1194  maxval = (math.log10(fix_y) - fraction * math.log10(ymin)) / \
    -
    1195  (1 - fraction)
    -
    1196  maxval = math.pow(10, maxval)
    -
    1197  hobj.SetMaximum(maxval)
    -
    1198 
    +
    1181 
    +
    1187 def FixTopRange(pad, fix_y, fraction):
    +
    1188  hobj = GetAxisHist(pad)
    +
    1189  ymin = hobj.GetMinimum()
    +
    1190  hobj.SetMaximum((fix_y - fraction * ymin) / (1. - fraction))
    +
    1191  if R.gPad.GetLogy():
    +
    1192  if ymin == 0.:
    +
    1193  print('Cannot adjust log-scale y-axis range if the minimum is zero!')
    +
    1194  return
    +
    1195  maxval = (math.log10(fix_y) - fraction * math.log10(ymin)) / \
    +
    1196  (1 - fraction)
    +
    1197  maxval = math.pow(10, maxval)
    +
    1198  hobj.SetMaximum(maxval)
    1199 
    -
    1200 def FixBothRanges(pad, fix_y_lo, frac_lo, fix_y_hi, frac_hi):
    -
    1201  """Adjusts y-axis range such that a lower and a higher value are located a
    -
    1202  fixed fraction of the frame height away from a new minimum and maximum
    -
    1203  respectively.
    -
    1204 
    -
    1205  This function is useful in conjunction with GetPadYMax which returns the
    -
    1206  maximum or minimum y value of all histograms and graphs drawn on the pad.
    -
    1207 
    -
    1208  In the example below, the minimum and maximum values found via this function
    -
    1209  are used as the `fix_y_lo` and `fix_y_hi` arguments, and the spacing fractions
    -
    1210  as 0.15 and 0.30 respectively.
    -
    1211 
    -
    1212  @code
    -
    1213  FixBothRanges(pad, GetPadYMin(pad), 0.15, GetPadYMax(pad), 0.30)
    -
    1214  @endcode
    -
    1215 
    -
    1216  ![](figures/FixBothRanges.png)
    -
    1217 
    -
    1218  Args:
    -
    1219  pad (TPad): A TPad on which histograms and graphs have already been drawn
    -
    1220  fix_y_lo (float): The y value which will end up a fraction `frac_lo` above
    -
    1221  the new axis minimum.
    -
    1222  frac_lo (float): A fraction of the y-axis height
    -
    1223  fix_y_hi (float): The y value which will end up a fraction `frac_hi` below
    -
    1224  from the new axis maximum.
    -
    1225  frac_hi (float): A fraction of the y-axis height
    -
    1226  """
    -
    1227  hobj = GetAxisHist(pad)
    -
    1228  ymin = fix_y_lo
    -
    1229  ymax = fix_y_hi
    -
    1230  if R.gPad.GetLogy():
    -
    1231  if ymin == 0.:
    -
    1232  print('Cannot adjust log-scale y-axis range if the minimum is zero!')
    -
    1233  return
    -
    1234  ymin = math.log10(ymin)
    -
    1235  ymax = math.log10(ymax)
    -
    1236  fl = frac_lo
    -
    1237  fh = frac_hi
    -
    1238 
    -
    1239  ymaxn = (
    -
    1240  (1. / (1. - (fh*fl/((1.-fl)*(1.-fh))))) *
    -
    1241  (1. / (1. - fh)) *
    -
    1242  (ymax - fh*ymin)
    -
    1243  )
    -
    1244  yminn = (ymin - fl*ymaxn) / (1. - fl)
    -
    1245  if R.gPad.GetLogy():
    -
    1246  yminn = math.pow(10, yminn)
    -
    1247  ymaxn = math.pow(10, ymaxn)
    -
    1248  hobj.SetMinimum(yminn)
    -
    1249  hobj.SetMaximum(ymaxn)
    -
    1250 
    +
    1200 
    +
    1201 def FixBothRanges(pad, fix_y_lo, frac_lo, fix_y_hi, frac_hi):
    +
    1202  """Adjusts y-axis range such that a lower and a higher value are located a
    +
    1203  fixed fraction of the frame height away from a new minimum and maximum
    +
    1204  respectively.
    +
    1205 
    +
    1206  This function is useful in conjunction with GetPadYMax which returns the
    +
    1207  maximum or minimum y value of all histograms and graphs drawn on the pad.
    +
    1208 
    +
    1209  In the example below, the minimum and maximum values found via this function
    +
    1210  are used as the `fix_y_lo` and `fix_y_hi` arguments, and the spacing fractions
    +
    1211  as 0.15 and 0.30 respectively.
    +
    1212 
    +
    1213  @code
    +
    1214  FixBothRanges(pad, GetPadYMin(pad), 0.15, GetPadYMax(pad), 0.30)
    +
    1215  @endcode
    +
    1216 
    +
    1217  ![](figures/FixBothRanges.png)
    +
    1218 
    +
    1219  Args:
    +
    1220  pad (TPad): A TPad on which histograms and graphs have already been drawn
    +
    1221  fix_y_lo (float): The y value which will end up a fraction `frac_lo` above
    +
    1222  the new axis minimum.
    +
    1223  frac_lo (float): A fraction of the y-axis height
    +
    1224  fix_y_hi (float): The y value which will end up a fraction `frac_hi` below
    +
    1225  from the new axis maximum.
    +
    1226  frac_hi (float): A fraction of the y-axis height
    +
    1227  """
    +
    1228  hobj = GetAxisHist(pad)
    +
    1229  ymin = fix_y_lo
    +
    1230  ymax = fix_y_hi
    +
    1231  if R.gPad.GetLogy():
    +
    1232  if ymin == 0.:
    +
    1233  print('Cannot adjust log-scale y-axis range if the minimum is zero!')
    +
    1234  return
    +
    1235  ymin = math.log10(ymin)
    +
    1236  ymax = math.log10(ymax)
    +
    1237  fl = frac_lo
    +
    1238  fh = frac_hi
    +
    1239 
    +
    1240  ymaxn = (
    +
    1241  (1. / (1. - (fh*fl/((1.-fl)*(1.-fh))))) *
    +
    1242  (1. / (1. - fh)) *
    +
    1243  (ymax - fh*ymin)
    +
    1244  )
    +
    1245  yminn = (ymin - fl*ymaxn) / (1. - fl)
    +
    1246  if R.gPad.GetLogy():
    +
    1247  yminn = math.pow(10, yminn)
    +
    1248  ymaxn = math.pow(10, ymaxn)
    +
    1249  hobj.SetMinimum(yminn)
    +
    1250  hobj.SetMaximum(ymaxn)
    1251 
    -
    1252 def GetPadYMaxInRange(pad, x_min, x_max, do_min=False):
    -
    1253  pad_obs = pad.GetListOfPrimitives()
    -
    1254  if pad_obs is None:
    -
    1255  return 0.
    -
    1256  h_max = -99999.
    -
    1257  h_min = +99999.
    -
    1258  for obj in pad_obs:
    -
    1259  if obj.InheritsFrom(R.TH1.Class()):
    -
    1260  hobj = obj
    -
    1261  for j in range(1, hobj.GetNbinsX()+1):
    -
    1262  if (hobj.GetBinLowEdge(j) + hobj.GetBinWidth(j) < x_min or
    -
    1263  hobj.GetBinLowEdge(j) > x_max):
    -
    1264  continue
    -
    1265  if (hobj.GetBinContent(j) + hobj.GetBinError(j) > h_max):
    -
    1266  h_max = hobj.GetBinContent(j) + hobj.GetBinError(j)
    -
    1267  if (hobj.GetBinContent(j) - hobj.GetBinError(j) < h_min) and not do_min:
    -
    1268  # If we're looking for the minimum don't count TH1s
    -
    1269  # because we probably only care about graphs
    -
    1270  h_min = hobj.GetBinContent(j) - hobj.GetBinError(j)
    -
    1271  elif obj.InheritsFrom(R.TGraphAsymmErrors.Class()):
    -
    1272  gobj = obj
    -
    1273  n = gobj.GetN()
    -
    1274  for k in range(0, n):
    -
    1275  x = gobj.GetX()[k]
    -
    1276  y = gobj.GetY()[k]
    -
    1277  if x < x_min or x > x_max:
    -
    1278  continue
    -
    1279  if (y + gobj.GetEYhigh()[k]) > h_max:
    -
    1280  h_max = y + gobj.GetEYhigh()[k]
    -
    1281  if (y - gobj.GetEYlow()[k]) < h_min:
    -
    1282  h_min = y - gobj.GetEYlow()[k]
    -
    1283  elif obj.InheritsFrom(R.TGraphErrors.Class()):
    -
    1284  gobj = obj
    -
    1285  n = gobj.GetN()
    -
    1286  for k in range(0, n):
    -
    1287  x = gobj.GetX()[k]
    -
    1288  y = gobj.GetY()[k]
    -
    1289  if x < x_min or x > x_max:
    -
    1290  continue
    -
    1291  if (y + gobj.GetEY()[k]) > h_max:
    -
    1292  h_max = y + gobj.GetEY()[k]
    -
    1293  if (y - gobj.GetEY()[k]) < h_min:
    -
    1294  h_min = y - gobj.GetEY()[k]
    -
    1295  elif obj.InheritsFrom(R.TGraph.Class()):
    -
    1296  gobj = obj
    -
    1297  n = gobj.GetN()
    -
    1298  for k in range(0, n):
    -
    1299  x = gobj.GetX()[k]
    -
    1300  y = gobj.GetY()[k]
    -
    1301  if x < x_min or x > x_max:
    -
    1302  continue
    -
    1303  if y > h_max:
    -
    1304  h_max = y
    -
    1305  if y < h_min:
    -
    1306  h_min = y
    -
    1307  return h_max if do_min is False else h_min
    -
    1308 
    +
    1252 
    +
    1253 def GetPadYMaxInRange(pad, x_min, x_max, do_min=False):
    +
    1254  pad_obs = pad.GetListOfPrimitives()
    +
    1255  if pad_obs is None:
    +
    1256  return 0.
    +
    1257  h_max = -99999.
    +
    1258  h_min = +99999.
    +
    1259  for obj in pad_obs:
    +
    1260  if obj.InheritsFrom(R.TH1.Class()):
    +
    1261  hobj = obj
    +
    1262  for j in range(1, hobj.GetNbinsX()+1):
    +
    1263  if (hobj.GetBinLowEdge(j) + hobj.GetBinWidth(j) < x_min or
    +
    1264  hobj.GetBinLowEdge(j) > x_max):
    +
    1265  continue
    +
    1266  if (hobj.GetBinContent(j) + hobj.GetBinError(j) > h_max):
    +
    1267  h_max = hobj.GetBinContent(j) + hobj.GetBinError(j)
    +
    1268  if (hobj.GetBinContent(j) - hobj.GetBinError(j) < h_min) and not do_min:
    +
    1269  # If we're looking for the minimum don't count TH1s
    +
    1270  # because we probably only care about graphs
    +
    1271  h_min = hobj.GetBinContent(j) - hobj.GetBinError(j)
    +
    1272  elif obj.InheritsFrom(R.TGraphAsymmErrors.Class()):
    +
    1273  gobj = obj
    +
    1274  n = gobj.GetN()
    +
    1275  for k in range(0, n):
    +
    1276  x = gobj.GetX()[k]
    +
    1277  y = gobj.GetY()[k]
    +
    1278  if x < x_min or x > x_max:
    +
    1279  continue
    +
    1280  if (y + gobj.GetEYhigh()[k]) > h_max:
    +
    1281  h_max = y + gobj.GetEYhigh()[k]
    +
    1282  if (y - gobj.GetEYlow()[k]) < h_min:
    +
    1283  h_min = y - gobj.GetEYlow()[k]
    +
    1284  elif obj.InheritsFrom(R.TGraphErrors.Class()):
    +
    1285  gobj = obj
    +
    1286  n = gobj.GetN()
    +
    1287  for k in range(0, n):
    +
    1288  x = gobj.GetX()[k]
    +
    1289  y = gobj.GetY()[k]
    +
    1290  if x < x_min or x > x_max:
    +
    1291  continue
    +
    1292  if (y + gobj.GetEY()[k]) > h_max:
    +
    1293  h_max = y + gobj.GetEY()[k]
    +
    1294  if (y - gobj.GetEY()[k]) < h_min:
    +
    1295  h_min = y - gobj.GetEY()[k]
    +
    1296  elif obj.InheritsFrom(R.TGraph.Class()):
    +
    1297  gobj = obj
    +
    1298  n = gobj.GetN()
    +
    1299  for k in range(0, n):
    +
    1300  x = gobj.GetX()[k]
    +
    1301  y = gobj.GetY()[k]
    +
    1302  if x < x_min or x > x_max:
    +
    1303  continue
    +
    1304  if y > h_max:
    +
    1305  h_max = y
    +
    1306  if y < h_min:
    +
    1307  h_min = y
    +
    1308  return h_max if do_min is False else h_min
    1309 
    -
    1310 def GetPadYMax(pad, do_min=False):
    -
    1311  pad_obs = pad.GetListOfPrimitives()
    -
    1312  if pad_obs is None:
    -
    1313  return 0.
    -
    1314  xmin = GetAxisHist(pad).GetXaxis().GetXmin()
    -
    1315  xmax = GetAxisHist(pad).GetXaxis().GetXmax()
    -
    1316  return GetPadYMaxInRange(pad, xmin, xmax, do_min)
    -
    1317 
    +
    1310 
    +
    1311 def GetPadYMax(pad, do_min=False):
    +
    1312  pad_obs = pad.GetListOfPrimitives()
    +
    1313  if pad_obs is None:
    +
    1314  return 0.
    +
    1315  xmin = GetAxisHist(pad).GetXaxis().GetXmin()
    +
    1316  xmax = GetAxisHist(pad).GetXaxis().GetXmax()
    +
    1317  return GetPadYMaxInRange(pad, xmin, xmax, do_min)
    1318 
    -
    1319 def GetPadYMin(pad):
    -
    1320  return GetPadYMax(pad, True)
    -
    1321 
    +
    1319 
    +
    1320 def GetPadYMin(pad):
    +
    1321  return GetPadYMax(pad, True)
    1322 
    - -
    1324  R.gPad.GetFrame().Draw()
    -
    1325  R.gPad.RedrawAxis()
    -
    1326 
    +
    1323 
    +
    1324 def FixOverlay():
    +
    1325  R.gPad.GetFrame().Draw()
    +
    1326  R.gPad.RedrawAxis()
    1327 
    -
    1328 def FixBoxPadding(pad, box, frac):
    -
    1329  # Get the bounds of the box - these are in the normalised
    -
    1330  # Pad co-ordinates.
    -
    1331  p_x1 = box.GetX1()
    -
    1332  p_x2 = box.GetX2()
    -
    1333  p_y1 = box.GetY1()
    -
    1334 
    -
    1335  #Convert to normalised co-ordinates in the frame
    -
    1336  f_x1 = (p_x1 - pad.GetLeftMargin()) / (1. - pad.GetLeftMargin() - pad.GetRightMargin())
    -
    1337  f_x2 = (p_x2 - pad.GetLeftMargin()) / (1. - pad.GetLeftMargin() - pad.GetRightMargin())
    -
    1338  f_y1 = (p_y1 - pad.GetBottomMargin()) / (1. - pad.GetTopMargin() - pad.GetBottomMargin())
    -
    1339 
    -
    1340  # Extract histogram providing the frame and axes
    -
    1341  hobj = GetAxisHist(pad)
    -
    1342 
    -
    1343  xmin = hobj.GetBinLowEdge(hobj.GetXaxis().GetFirst())
    -
    1344  xmax = hobj.GetBinLowEdge(hobj.GetXaxis().GetLast()+1)
    -
    1345  ymin = hobj.GetMinimum()
    -
    1346  ymax = hobj.GetMaximum()
    -
    1347 
    -
    1348  # Convert box bounds to x-axis values
    -
    1349  a_x1 = xmin + (xmax - xmin) * f_x1
    -
    1350  a_x2 = xmin + (xmax - xmin) * f_x2
    -
    1351 
    -
    1352  # Get the histogram maximum in this range, given as y-axis value
    -
    1353  a_max_h = GetPadYMaxInRange(pad, a_x1, a_x2)
    -
    1354 
    -
    1355  # Convert this to a normalised frame value
    -
    1356  f_max_h = (a_max_h - ymin) / (ymax - ymin);
    -
    1357  if R.gPad.GetLogy() and f_max_h > 0.:
    -
    1358  f_max_h = (math.log10(a_max_h) - math.log10(ymin)) / (math.log10(ymax) - math.log10(ymin))
    -
    1359 
    -
    1360  if f_y1 - f_max_h < frac:
    -
    1361  f_target = 1. - (f_y1 - frac)
    -
    1362  FixTopRange(pad, a_max_h, f_target)
    -
    1363 
    +
    1328 
    +
    1329 def FixBoxPadding(pad, box, frac):
    +
    1330  # Get the bounds of the box - these are in the normalised
    +
    1331  # Pad co-ordinates.
    +
    1332  p_x1 = box.GetX1()
    +
    1333  p_x2 = box.GetX2()
    +
    1334  p_y1 = box.GetY1()
    +
    1335 
    +
    1336  #Convert to normalised co-ordinates in the frame
    +
    1337  f_x1 = (p_x1 - pad.GetLeftMargin()) / (1. - pad.GetLeftMargin() - pad.GetRightMargin())
    +
    1338  f_x2 = (p_x2 - pad.GetLeftMargin()) / (1. - pad.GetLeftMargin() - pad.GetRightMargin())
    +
    1339  f_y1 = (p_y1 - pad.GetBottomMargin()) / (1. - pad.GetTopMargin() - pad.GetBottomMargin())
    +
    1340 
    +
    1341  # Extract histogram providing the frame and axes
    +
    1342  hobj = GetAxisHist(pad)
    +
    1343 
    +
    1344  xmin = hobj.GetBinLowEdge(hobj.GetXaxis().GetFirst())
    +
    1345  xmax = hobj.GetBinLowEdge(hobj.GetXaxis().GetLast()+1)
    +
    1346  ymin = hobj.GetMinimum()
    +
    1347  ymax = hobj.GetMaximum()
    +
    1348 
    +
    1349  # Convert box bounds to x-axis values
    +
    1350  a_x1 = xmin + (xmax - xmin) * f_x1
    +
    1351  a_x2 = xmin + (xmax - xmin) * f_x2
    +
    1352 
    +
    1353  # Get the histogram maximum in this range, given as y-axis value
    +
    1354  a_max_h = GetPadYMaxInRange(pad, a_x1, a_x2)
    +
    1355 
    +
    1356  # Convert this to a normalised frame value
    +
    1357  f_max_h = (a_max_h - ymin) / (ymax - ymin);
    +
    1358  if R.gPad.GetLogy() and f_max_h > 0.:
    +
    1359  f_max_h = (math.log10(a_max_h) - math.log10(ymin)) / (math.log10(ymax) - math.log10(ymin))
    +
    1360 
    +
    1361  if f_y1 - f_max_h < frac:
    +
    1362  f_target = 1. - (f_y1 - frac)
    +
    1363  FixTopRange(pad, a_max_h, f_target)
    1364 
    1365 
    1366 
    -
    1370 
    +
    1367 
    1371 
    -
    1372 def StandardAxes(xaxis, yaxis, var, units):
    -
    1373  width = xaxis.GetBinWidth(1)
    -
    1374  w_label = "%.1f" % width
    -
    1375  if units == "":
    -
    1376  xaxis.SetTitle(var)
    -
    1377  yaxis.SetTitle("Events / " + w_label)
    -
    1378  else:
    -
    1379  xaxis.SetTitle(var + " (" + units + ")")
    -
    1380  yaxis.SetTitle("Events / " + w_label + " " + units)
    -
    1381 
    +
    1372 
    +
    1373 def StandardAxes(xaxis, yaxis, var, units):
    +
    1374  width = xaxis.GetBinWidth(1)
    +
    1375  w_label = "%.1f" % width
    +
    1376  if units == "":
    +
    1377  xaxis.SetTitle(var)
    +
    1378  yaxis.SetTitle("Events / " + w_label)
    +
    1379  else:
    +
    1380  xaxis.SetTitle(var + " (" + units + ")")
    +
    1381  yaxis.SetTitle("Events / " + w_label + " " + units)
    1382 
    -
    1383 def DrawCMSLogo(pad, cmsText, extraText, iPosX, relPosX, relPosY, relExtraDY, extraText2='', cmsTextSize=0.8):
    -
    1384  """Blah
    -
    1385 
    -
    1386  Args:
    -
    1387  pad (TYPE): Description
    -
    1388  cmsText (TYPE): Description
    -
    1389  extraText (TYPE): Description
    -
    1390  iPosX (TYPE): Description
    -
    1391  relPosX (TYPE): Description
    -
    1392  relPosY (TYPE): Description
    -
    1393  relExtraDY (TYPE): Description
    -
    1394  extraText2 (str): Description
    -
    1395  cmsTextSize (float): Description
    -
    1396 
    -
    1397  Returns:
    -
    1398  TYPE: Description
    -
    1399  """
    -
    1400  pad.cd()
    -
    1401  cmsTextFont = 62 # default is helvetic-bold
    -
    1402 
    -
    1403  writeExtraText = len(extraText) > 0
    -
    1404  writeExtraText2 = len(extraText2) > 0
    -
    1405  extraTextFont = 52
    -
    1406 
    -
    1407  # text sizes and text offsets with respect to the top frame
    -
    1408  # in unit of the top margin size
    -
    1409  lumiTextOffset = 0.2
    -
    1410  # cmsTextSize = 0.8
    -
    1411  # float cmsTextOffset = 0.1; // only used in outOfFrame version
    -
    1412 
    -
    1413  # ratio of 'CMS' and extra text size
    -
    1414  extraOverCmsTextSize = 0.76
    -
    1415 
    -
    1416  outOfFrame = False
    -
    1417  if iPosX / 10 == 0:
    -
    1418  outOfFrame = True
    -
    1419 
    -
    1420  alignY_ = 3
    -
    1421  alignX_ = 2
    -
    1422  if (iPosX / 10 == 0):
    -
    1423  alignX_ = 1
    -
    1424  if (iPosX == 0):
    -
    1425  alignX_ = 1
    -
    1426  if (iPosX == 0):
    -
    1427  alignY_ = 1
    -
    1428  if (iPosX / 10 == 1):
    -
    1429  alignX_ = 1
    -
    1430  if (iPosX / 10 == 2):
    -
    1431  alignX_ = 2
    -
    1432  if (iPosX / 10 == 3):
    -
    1433  alignX_ = 3
    -
    1434  # if (iPosX == 0): relPosX = 0.14
    -
    1435  align_ = 10 * alignX_ + alignY_
    -
    1436 
    -
    1437  l = pad.GetLeftMargin()
    -
    1438  t = pad.GetTopMargin()
    -
    1439  r = pad.GetRightMargin()
    -
    1440  b = pad.GetBottomMargin()
    -
    1441 
    -
    1442  latex = R.TLatex()
    -
    1443  latex.SetNDC()
    -
    1444  latex.SetTextAngle(0)
    -
    1445  latex.SetTextColor(R.kBlack)
    -
    1446 
    -
    1447  extraTextSize = extraOverCmsTextSize * cmsTextSize
    -
    1448  pad_ratio = (float(pad.GetWh()) * pad.GetAbsHNDC()) / \
    -
    1449  (float(pad.GetWw()) * pad.GetAbsWNDC())
    -
    1450  if (pad_ratio < 1.):
    -
    1451  pad_ratio = 1.
    -
    1452 
    -
    1453  if outOfFrame:
    -
    1454  latex.SetTextFont(cmsTextFont)
    -
    1455  latex.SetTextAlign(11)
    -
    1456  latex.SetTextSize(cmsTextSize * t * (1./pad_ratio))
    -
    1457  latex.DrawLatex(l, 1 - t + lumiTextOffset * t, cmsText)
    -
    1458 
    -
    1459  posX_ = 0
    -
    1460  if iPosX % 10 <= 1:
    -
    1461  posX_ = l + relPosX * (1 - l - r)
    -
    1462  elif (iPosX % 10 == 2):
    -
    1463  posX_ = l + 0.5 * (1 - l - r)
    -
    1464  elif (iPosX % 10 == 3):
    -
    1465  posX_ = 1 - r - relPosX * (1 - l - r)
    -
    1466 
    -
    1467  posY_ = 1 - t - relPosY * (1 - t - b)
    -
    1468  if not outOfFrame:
    -
    1469  latex.SetTextFont(cmsTextFont)
    -
    1470  latex.SetTextSize(cmsTextSize * t * pad_ratio)
    -
    1471  latex.SetTextAlign(align_)
    -
    1472  latex.DrawLatex(posX_, posY_, cmsText)
    -
    1473  if writeExtraText:
    -
    1474  latex.SetTextFont(extraTextFont)
    -
    1475  latex.SetTextAlign(align_)
    -
    1476  latex.SetTextSize(extraTextSize * t * pad_ratio)
    -
    1477  latex.DrawLatex(
    -
    1478  posX_, posY_ - relExtraDY * cmsTextSize * t, extraText)
    -
    1479  if writeExtraText2:
    -
    1480  latex.DrawLatex(
    -
    1481  posX_, posY_ - 1.8 * relExtraDY * cmsTextSize * t, extraText2)
    -
    1482  elif writeExtraText:
    -
    1483  if iPosX == 0:
    -
    1484  posX_ = l + relPosX * (1 - l - r)
    -
    1485  posY_ = 1 - t + lumiTextOffset * t
    -
    1486  latex.SetTextFont(extraTextFont)
    -
    1487  latex.SetTextSize(extraTextSize * t * (1./pad_ratio))
    -
    1488  latex.SetTextAlign(align_)
    -
    1489  latex.DrawLatex(posX_, posY_, extraText)
    -
    1490 
    +
    1383 
    +
    1384 def DrawCMSLogo(pad, cmsText, extraText, iPosX, relPosX, relPosY, relExtraDY, extraText2='', cmsTextSize=0.8):
    +
    1385  """Blah
    +
    1386 
    +
    1387  Args:
    +
    1388  pad (TYPE): Description
    +
    1389  cmsText (TYPE): Description
    +
    1390  extraText (TYPE): Description
    +
    1391  iPosX (TYPE): Description
    +
    1392  relPosX (TYPE): Description
    +
    1393  relPosY (TYPE): Description
    +
    1394  relExtraDY (TYPE): Description
    +
    1395  extraText2 (str): Description
    +
    1396  cmsTextSize (float): Description
    +
    1397 
    +
    1398  Returns:
    +
    1399  TYPE: Description
    +
    1400  """
    +
    1401  pad.cd()
    +
    1402  cmsTextFont = 62 # default is helvetic-bold
    +
    1403 
    +
    1404  writeExtraText = len(extraText) > 0
    +
    1405  writeExtraText2 = len(extraText2) > 0
    +
    1406  extraTextFont = 52
    +
    1407 
    +
    1408  # text sizes and text offsets with respect to the top frame
    +
    1409  # in unit of the top margin size
    +
    1410  lumiTextOffset = 0.2
    +
    1411  # cmsTextSize = 0.8
    +
    1412  # float cmsTextOffset = 0.1; // only used in outOfFrame version
    +
    1413 
    +
    1414  # ratio of 'CMS' and extra text size
    +
    1415  extraOverCmsTextSize = 0.76
    +
    1416 
    +
    1417  outOfFrame = False
    +
    1418  if iPosX / 10 == 0:
    +
    1419  outOfFrame = True
    +
    1420 
    +
    1421  alignY_ = 3
    +
    1422  alignX_ = 2
    +
    1423  if (iPosX / 10 == 0):
    +
    1424  alignX_ = 1
    +
    1425  if (iPosX == 0):
    +
    1426  alignX_ = 1
    +
    1427  if (iPosX == 0):
    +
    1428  alignY_ = 1
    +
    1429  if (iPosX / 10 == 1):
    +
    1430  alignX_ = 1
    +
    1431  if (iPosX / 10 == 2):
    +
    1432  alignX_ = 2
    +
    1433  if (iPosX / 10 == 3):
    +
    1434  alignX_ = 3
    +
    1435  # if (iPosX == 0): relPosX = 0.14
    +
    1436  align_ = 10 * alignX_ + alignY_
    +
    1437 
    +
    1438  l = pad.GetLeftMargin()
    +
    1439  t = pad.GetTopMargin()
    +
    1440  r = pad.GetRightMargin()
    +
    1441  b = pad.GetBottomMargin()
    +
    1442 
    +
    1443  latex = R.TLatex()
    +
    1444  latex.SetNDC()
    +
    1445  latex.SetTextAngle(0)
    +
    1446  latex.SetTextColor(R.kBlack)
    +
    1447 
    +
    1448  extraTextSize = extraOverCmsTextSize * cmsTextSize
    +
    1449  pad_ratio = (float(pad.GetWh()) * pad.GetAbsHNDC()) / \
    +
    1450  (float(pad.GetWw()) * pad.GetAbsWNDC())
    +
    1451  if (pad_ratio < 1.):
    +
    1452  pad_ratio = 1.
    +
    1453 
    +
    1454  if outOfFrame:
    +
    1455  latex.SetTextFont(cmsTextFont)
    +
    1456  latex.SetTextAlign(11)
    +
    1457  latex.SetTextSize(cmsTextSize * t * (1./pad_ratio))
    +
    1458  latex.DrawLatex(l, 1 - t + lumiTextOffset * t, cmsText)
    +
    1459 
    +
    1460  posX_ = 0
    +
    1461  if iPosX % 10 <= 1:
    +
    1462  posX_ = l + relPosX * (1 - l - r)
    +
    1463  elif (iPosX % 10 == 2):
    +
    1464  posX_ = l + 0.5 * (1 - l - r)
    +
    1465  elif (iPosX % 10 == 3):
    +
    1466  posX_ = 1 - r - relPosX * (1 - l - r)
    +
    1467 
    +
    1468  posY_ = 1 - t - relPosY * (1 - t - b)
    +
    1469  if not outOfFrame:
    +
    1470  latex.SetTextFont(cmsTextFont)
    +
    1471  latex.SetTextSize(cmsTextSize * t * pad_ratio)
    +
    1472  latex.SetTextAlign(align_)
    +
    1473  latex.DrawLatex(posX_, posY_, cmsText)
    +
    1474  if writeExtraText:
    +
    1475  latex.SetTextFont(extraTextFont)
    +
    1476  latex.SetTextAlign(align_)
    +
    1477  latex.SetTextSize(extraTextSize * t * pad_ratio)
    +
    1478  latex.DrawLatex(
    +
    1479  posX_, posY_ - relExtraDY * cmsTextSize * t, extraText)
    +
    1480  if writeExtraText2:
    +
    1481  latex.DrawLatex(
    +
    1482  posX_, posY_ - 1.8 * relExtraDY * cmsTextSize * t, extraText2)
    +
    1483  elif writeExtraText:
    +
    1484  if iPosX == 0:
    +
    1485  posX_ = l + relPosX * (1 - l - r)
    +
    1486  posY_ = 1 - t + lumiTextOffset * t
    +
    1487  latex.SetTextFont(extraTextFont)
    +
    1488  latex.SetTextSize(extraTextSize * t * (1./pad_ratio))
    +
    1489  latex.SetTextAlign(align_)
    +
    1490  latex.DrawLatex(posX_, posY_, extraText)
    1491 
    -
    1492 def PositionedLegend(width, height, pos, offset, horizontaloffset=None):
    -
    1493  o = offset
    -
    1494  ho = horizontaloffset
    -
    1495  if not ho:
    -
    1496  ho = o
    -
    1497  w = width
    -
    1498  h = height
    -
    1499  l = R.gPad.GetLeftMargin()
    -
    1500  t = R.gPad.GetTopMargin()
    -
    1501  b = R.gPad.GetBottomMargin()
    -
    1502  r = R.gPad.GetRightMargin()
    -
    1503  if pos == 1:
    -
    1504  return R.TLegend(l + ho, 1 - t - o - h, l + ho + w, 1 - t - o, '', 'NBNDC')
    -
    1505  if pos == 2:
    -
    1506  c = l + 0.5 * (1 - l - r)
    -
    1507  return R.TLegend(c - 0.5 * w, 1 - t - o - h, c + 0.5 * w, 1 - t - o, '', 'NBNDC')
    -
    1508  if pos == 3:
    -
    1509  return R.TLegend(1 - r - ho - w, 1 - t - o - h, 1 - r - ho, 1 - t - o, '', 'NBNDC')
    -
    1510  if pos == 4:
    -
    1511  return R.TLegend(l + ho, b + o, l + ho + w, b + o + h, '', 'NBNDC')
    -
    1512  if pos == 5:
    -
    1513  c = l + 0.5 * (1 - l - r)
    -
    1514  return R.TLegend(c - 0.5 * w, b + o, c + 0.5 * w, b + o + h, '', 'NBNDC')
    -
    1515  if pos == 6:
    -
    1516  return R.TLegend(1 - r - ho - w, b + o, 1 - r - ho, b + o + h, '', 'NBNDC')
    -
    1517 
    +
    1492 
    +
    1493 def PositionedLegend(width, height, pos, offset, horizontaloffset=None):
    +
    1494  o = offset
    +
    1495  ho = horizontaloffset
    +
    1496  if not ho:
    +
    1497  ho = o
    +
    1498  w = width
    +
    1499  h = height
    +
    1500  l = R.gPad.GetLeftMargin()
    +
    1501  t = R.gPad.GetTopMargin()
    +
    1502  b = R.gPad.GetBottomMargin()
    +
    1503  r = R.gPad.GetRightMargin()
    +
    1504  if pos == 1:
    +
    1505  return R.TLegend(l + ho, 1 - t - o - h, l + ho + w, 1 - t - o, '', 'NBNDC')
    +
    1506  if pos == 2:
    +
    1507  c = l + 0.5 * (1 - l - r)
    +
    1508  return R.TLegend(c - 0.5 * w, 1 - t - o - h, c + 0.5 * w, 1 - t - o, '', 'NBNDC')
    +
    1509  if pos == 3:
    +
    1510  return R.TLegend(1 - r - ho - w, 1 - t - o - h, 1 - r - ho, 1 - t - o, '', 'NBNDC')
    +
    1511  if pos == 4:
    +
    1512  return R.TLegend(l + ho, b + o, l + ho + w, b + o + h, '', 'NBNDC')
    +
    1513  if pos == 5:
    +
    1514  c = l + 0.5 * (1 - l - r)
    +
    1515  return R.TLegend(c - 0.5 * w, b + o, c + 0.5 * w, b + o + h, '', 'NBNDC')
    +
    1516  if pos == 6:
    +
    1517  return R.TLegend(1 - r - ho - w, b + o, 1 - r - ho, b + o + h, '', 'NBNDC')
    1518 
    -
    1519 def DrawHorizontalLine(pad, line, yval):
    -
    1520  axis = GetAxisHist(pad)
    -
    1521  xmin = axis.GetXaxis().GetXmin()
    -
    1522  xmax = axis.GetXaxis().GetXmax()
    -
    1523  line.DrawLine(xmin, yval, xmax, yval)
    -
    1524 
    +
    1519 
    +
    1520 def DrawHorizontalLine(pad, line, yval):
    +
    1521  axis = GetAxisHist(pad)
    +
    1522  xmin = axis.GetXaxis().GetXmin()
    +
    1523  xmax = axis.GetXaxis().GetXmax()
    +
    1524  line.DrawLine(xmin, yval, xmax, yval)
    1525 
    -
    1526 def DrawVerticalLine(pad, line, xval):
    -
    1527  axis = GetAxisHist(pad)
    -
    1528  ymin = axis.GetYaxis().GetXmin()
    -
    1529  ymax = axis.GetYaxis().GetXmax()
    -
    1530  line.DrawLine(xval, ymin, xval, ymax)
    -
    1531 
    -
    1532 def DrawVerticalBand(pad, box, x1, x2):
    -
    1533  axis = GetAxisHist(pad)
    -
    1534  ymin = axis.GetYaxis().GetXmin()
    -
    1535  ymax = axis.GetYaxis().GetXmax()
    -
    1536  box.DrawBox(x1, ymin, x2, ymax)
    -
    1537 
    +
    1526 
    +
    1527 def DrawVerticalLine(pad, line, xval):
    +
    1528  axis = GetAxisHist(pad)
    +
    1529  ymin = axis.GetYaxis().GetXmin()
    +
    1530  ymax = axis.GetYaxis().GetXmax()
    +
    1531  line.DrawLine(xval, ymin, xval, ymax)
    +
    1532 
    +
    1533 def DrawVerticalBand(pad, box, x1, x2):
    +
    1534  axis = GetAxisHist(pad)
    +
    1535  ymin = axis.GetYaxis().GetXmin()
    +
    1536  ymax = axis.GetYaxis().GetXmax()
    +
    1537  box.DrawBox(x1, ymin, x2, ymax)
    1538 
    -
    1539 def DrawTitle(pad, text, align, textOffset=0.2,textSize=0.6):
    -
    1540  pad_backup = R.gPad
    -
    1541  pad.cd()
    -
    1542  t = pad.GetTopMargin()
    -
    1543  l = pad.GetLeftMargin()
    -
    1544  r = pad.GetRightMargin()
    -
    1545 
    -
    1546  pad_ratio = (float(pad.GetWh()) * pad.GetAbsHNDC()) / \
    -
    1547  (float(pad.GetWw()) * pad.GetAbsWNDC())
    -
    1548  if pad_ratio < 1.:
    -
    1549  pad_ratio = 1.
    -
    1550 
    -
    1551  latex = R.TLatex()
    -
    1552  latex.SetNDC()
    -
    1553  latex.SetTextAngle(0)
    -
    1554  latex.SetTextColor(R.kBlack)
    -
    1555  latex.SetTextFont(42)
    -
    1556  latex.SetTextSize(textSize * t * pad_ratio)
    -
    1557 
    -
    1558  y_off = 1 - t + textOffset * t
    -
    1559  if align == 1:
    -
    1560  latex.SetTextAlign(11)
    -
    1561  if align == 1:
    -
    1562  latex.DrawLatex(l, y_off, text)
    -
    1563  if align == 2:
    -
    1564  latex.SetTextAlign(21)
    -
    1565  if align == 2:
    -
    1566  latex.DrawLatex(l + (1 - l - r) * 0.5, y_off, text)
    -
    1567  if align == 3:
    -
    1568  latex.SetTextAlign(31)
    -
    1569  if align == 3:
    -
    1570  latex.DrawLatex(1 - r, y_off, text)
    -
    1571  pad_backup.cd()
    -
    1572 
    +
    1539 
    +
    1540 def DrawTitle(pad, text, align, textOffset=0.2,textSize=0.6):
    +
    1541  pad_backup = R.gPad
    +
    1542  pad.cd()
    +
    1543  t = pad.GetTopMargin()
    +
    1544  l = pad.GetLeftMargin()
    +
    1545  r = pad.GetRightMargin()
    +
    1546 
    +
    1547  pad_ratio = (float(pad.GetWh()) * pad.GetAbsHNDC()) / \
    +
    1548  (float(pad.GetWw()) * pad.GetAbsWNDC())
    +
    1549  if pad_ratio < 1.:
    +
    1550  pad_ratio = 1.
    +
    1551 
    +
    1552  latex = R.TLatex()
    +
    1553  latex.SetNDC()
    +
    1554  latex.SetTextAngle(0)
    +
    1555  latex.SetTextColor(R.kBlack)
    +
    1556  latex.SetTextFont(42)
    +
    1557  latex.SetTextSize(textSize * t * pad_ratio)
    +
    1558 
    +
    1559  y_off = 1 - t + textOffset * t
    +
    1560  if align == 1:
    +
    1561  latex.SetTextAlign(11)
    +
    1562  if align == 1:
    +
    1563  latex.DrawLatex(l, y_off, text)
    +
    1564  if align == 2:
    +
    1565  latex.SetTextAlign(21)
    +
    1566  if align == 2:
    +
    1567  latex.DrawLatex(l + (1 - l - r) * 0.5, y_off, text)
    +
    1568  if align == 3:
    +
    1569  latex.SetTextAlign(31)
    +
    1570  if align == 3:
    +
    1571  latex.DrawLatex(1 - r, y_off, text)
    +
    1572  pad_backup.cd()
    1573 
    1574 
    1575 
    1576 
    -
    1582 
    -
    1583 def isclose(a, b, rel_tol=1e-9, abs_tol=0.0):
    -
    1584  return abs(a-b) <= max(abs_tol, rel_tol * max(abs(a),abs(b)))
    -
    1585 
    -
    1586 def StyleLimitBand(graph_dict, overwrite_style_dict=None):
    -
    1587  style_dict = {
    -
    1588  'obs' : { 'LineWidth' : 2},
    -
    1589  'exp0' : { 'LineWidth' : 2, 'LineColor' : R.kRed},
    -
    1590  'exp1' : { 'FillColor' : R.kGreen},
    -
    1591  'exp2' : { 'FillColor' : R.kYellow}
    -
    1592  }
    -
    1593  if overwrite_style_dict is not None:
    -
    1594  for key in overwrite_style_dict:
    -
    1595  if key in style_dict:
    -
    1596  style_dict[key].update(overwrite_style_dict[key])
    -
    1597  else:
    -
    1598  style_dict[key] = overwrite_style_dict[key]
    -
    1599  for key in graph_dict:
    -
    1600  Set(graph_dict[key],**style_dict[key])
    -
    1601 
    -
    1602 def DrawLimitBand(pad, graph_dict, draw=['exp2', 'exp1', 'exp0', 'obs'], draw_legend=None,
    -
    1603  legend=None, legend_overwrite=None):
    -
    1604  legend_dict = {
    -
    1605  'obs' : { 'Label' : 'Observed', 'LegendStyle' : 'LP', 'DrawStyle' : 'PLSAME'},
    -
    1606  'exp0' : { 'Label' : 'Expected', 'LegendStyle' : 'L', 'DrawStyle' : 'LSAME'},
    -
    1607  'exp1' : { 'Label' : '#pm1#sigma Expected', 'LegendStyle' : 'F', 'DrawStyle' : '3SAME'},
    -
    1608  'exp2' : { 'Label' : '#pm2#sigma Expected', 'LegendStyle' : 'F', 'DrawStyle' : '3SAME'}
    -
    1609  }
    -
    1610  if legend_overwrite is not None:
    -
    1611  for key in legend_overwrite:
    -
    1612  if key in legend_dict:
    -
    1613  legend_dict[key].update(legend_overwrite[key])
    -
    1614  else:
    -
    1615  legend_dict[key] = legend_overwrite[key]
    -
    1616  pad.cd()
    -
    1617  for key in draw:
    -
    1618  if key in graph_dict:
    -
    1619  graph_dict[key].Draw(legend_dict[key]['DrawStyle'])
    -
    1620  if legend is not None:
    -
    1621  if draw_legend is None:
    -
    1622  draw_legend = reversed(draw)
    -
    1623  for key in draw_legend:
    -
    1624  if key in graph_dict:
    -
    1625  legend.AddEntry(graph_dict[key],legend_dict[key]['Label'],legend_dict[key]['LegendStyle'])
    -
    1626 
    +
    1577 
    +
    1583 
    +
    1584 def isclose(a, b, rel_tol=1e-9, abs_tol=0.0):
    +
    1585  return abs(a-b) <= max(abs_tol, rel_tol * max(abs(a),abs(b)))
    +
    1586 
    +
    1587 def StyleLimitBand(graph_dict, overwrite_style_dict=None):
    +
    1588  style_dict = {
    +
    1589  'obs' : { 'LineWidth' : 2},
    +
    1590  'exp0' : { 'LineWidth' : 2, 'LineColor' : R.kRed},
    +
    1591  'exp1' : { 'FillColor' : R.kGreen},
    +
    1592  'exp2' : { 'FillColor' : R.kYellow}
    +
    1593  }
    +
    1594  if overwrite_style_dict is not None:
    +
    1595  for key in overwrite_style_dict:
    +
    1596  if key in style_dict:
    +
    1597  style_dict[key].update(overwrite_style_dict[key])
    +
    1598  else:
    +
    1599  style_dict[key] = overwrite_style_dict[key]
    +
    1600  for key in graph_dict:
    +
    1601  Set(graph_dict[key],**style_dict[key])
    +
    1602 
    +
    1603 def DrawLimitBand(pad, graph_dict, draw=['exp2', 'exp1', 'exp0', 'obs'], draw_legend=None,
    +
    1604  legend=None, legend_overwrite=None):
    +
    1605  legend_dict = {
    +
    1606  'obs' : { 'Label' : 'Observed', 'LegendStyle' : 'LP', 'DrawStyle' : 'PLSAME'},
    +
    1607  'exp0' : { 'Label' : 'Expected', 'LegendStyle' : 'L', 'DrawStyle' : 'LSAME'},
    +
    1608  'exp1' : { 'Label' : '#pm1#sigma Expected', 'LegendStyle' : 'F', 'DrawStyle' : '3SAME'},
    +
    1609  'exp2' : { 'Label' : '#pm2#sigma Expected', 'LegendStyle' : 'F', 'DrawStyle' : '3SAME'}
    +
    1610  }
    +
    1611  if legend_overwrite is not None:
    +
    1612  for key in legend_overwrite:
    +
    1613  if key in legend_dict:
    +
    1614  legend_dict[key].update(legend_overwrite[key])
    +
    1615  else:
    +
    1616  legend_dict[key] = legend_overwrite[key]
    +
    1617  pad.cd()
    +
    1618  for key in draw:
    +
    1619  if key in graph_dict:
    +
    1620  graph_dict[key].Draw(legend_dict[key]['DrawStyle'])
    +
    1621  if legend is not None:
    +
    1622  if draw_legend is None:
    +
    1623  draw_legend = reversed(draw)
    +
    1624  for key in draw_legend:
    +
    1625  if key in graph_dict:
    +
    1626  legend.AddEntry(graph_dict[key],legend_dict[key]['Label'],legend_dict[key]['LegendStyle'])
    1627 
    1628 
    1629 
    1630 
    1631 
    1632 
    -
    1636 def contourFromTH2(h2in, threshold, minPoints=10, frameValue=1000.):
    -
    1637  # // http://root.cern.ch/root/html/tutorials/hist/ContourList.C.html
    -
    1638  contoursList = [threshold]
    -
    1639  contours = array('d', contoursList)
    -
    1640  # if (h2in.GetNbinsX() * h2in.GetNbinsY()) > 10000: minPoints = 50
    -
    1641  # if (h2in.GetNbinsX() * h2in.GetNbinsY()) <= 100: minPoints = 10
    -
    1642 
    -
    1643  h2 = frameTH2D(h2in, threshold, frameValue)
    -
    1644 
    -
    1645  h2.SetContour(1, contours)
    -
    1646 
    -
    1647  # Draw contours as filled regions, and Save points
    -
    1648  # backup = R.gPad # doesn't work in pyroot, backup behaves like a ref to gPad
    -
    1649  canv = R.TCanvas('tmp', 'tmp')
    -
    1650  canv.cd()
    -
    1651  h2.Draw('CONT Z LIST')
    -
    1652  R.gPad.Update() # Needed to force the plotting and retrieve the contours in
    -
    1653 
    -
    1654  conts = R.gROOT.GetListOfSpecials().FindObject('contours')
    -
    1655  contLevel = None
    -
    1656 
    -
    1657  if conts is None or conts.GetSize() == 0:
    -
    1658  print('*** No Contours Were Extracted!')
    -
    1659  return None
    -
    1660  ret = R.TList()
    -
    1661  for i in range(conts.GetSize()):
    -
    1662  contLevel = conts.At(i)
    -
    1663  print('>> Contour %d has %d Graphs' % (i, contLevel.GetSize()))
    -
    1664  for j in range(contLevel.GetSize()):
    -
    1665  gr1 = contLevel.At(j)
    -
    1666  print('\t Graph %d has %d points' % (j, gr1.GetN()))
    -
    1667  if gr1.GetN() > minPoints:
    -
    1668  ret.Add(gr1.Clone())
    -
    1669  # // break;
    -
    1670  # backup.cd()
    -
    1671  canv.Close()
    -
    1672  return ret
    -
    1673 
    +
    1633 
    +
    1637 def contourFromTH2(h2in, threshold, minPoints=10, frameValue=1000.):
    +
    1638  # // http://root.cern.ch/root/html/tutorials/hist/ContourList.C.html
    +
    1639  contoursList = [threshold]
    +
    1640  contours = array('d', contoursList)
    +
    1641  # if (h2in.GetNbinsX() * h2in.GetNbinsY()) > 10000: minPoints = 50
    +
    1642  # if (h2in.GetNbinsX() * h2in.GetNbinsY()) <= 100: minPoints = 10
    +
    1643 
    +
    1644  h2 = frameTH2D(h2in, threshold, frameValue)
    +
    1645 
    +
    1646  h2.SetContour(1, contours)
    +
    1647 
    +
    1648  # Draw contours as filled regions, and Save points
    +
    1649  # backup = R.gPad # doesn't work in pyroot, backup behaves like a ref to gPad
    +
    1650  canv = R.TCanvas('tmp', 'tmp')
    +
    1651  canv.cd()
    +
    1652  h2.Draw('CONT Z LIST')
    +
    1653  R.gPad.Update() # Needed to force the plotting and retrieve the contours in
    +
    1654 
    +
    1655  conts = R.gROOT.GetListOfSpecials().FindObject('contours')
    +
    1656  contLevel = None
    +
    1657 
    +
    1658  if conts is None or conts.GetSize() == 0:
    +
    1659  print('*** No Contours Were Extracted!')
    +
    1660  return None
    +
    1661  ret = R.TList()
    +
    1662  for i in range(conts.GetSize()):
    +
    1663  contLevel = conts.At(i)
    +
    1664  print('>> Contour %d has %d Graphs' % (i, contLevel.GetSize()))
    +
    1665  for j in range(contLevel.GetSize()):
    +
    1666  gr1 = contLevel.At(j)
    +
    1667  print('\t Graph %d has %d points' % (j, gr1.GetN()))
    +
    1668  if gr1.GetN() > minPoints:
    +
    1669  ret.Add(gr1.Clone())
    +
    1670  # // break;
    +
    1671  # backup.cd()
    +
    1672  canv.Close()
    +
    1673  return ret
    1674 
    -
    1675 def frameTH2D(hist, threshold, frameValue=1000):
    -
    1676  # Now supports variable-binned histograms First adds a narrow frame (1% of
    -
    1677  # of bin widths) around the outside with same values as the real edge. Then
    -
    1678  # adds another frame another frame around this one filled with some chosen
    -
    1679  # value that will make the contours close
    -
    1680 
    -
    1681  # Get lists of the bin edges
    -
    1682  x_bins = [hist.GetXaxis().GetBinLowEdge(x)
    -
    1683  for x in range(1, hist.GetNbinsX() + 2)]
    -
    1684  y_bins = [hist.GetYaxis().GetBinLowEdge(y)
    -
    1685  for y in range(1, hist.GetNbinsY() + 2)]
    -
    1686 
    -
    1687  # New bin edge arrays will need an extra four values
    -
    1688  x_new = [0.] * (len(x_bins) + 4)
    -
    1689  y_new = [0.] * (len(y_bins) + 4)
    -
    1690 
    -
    1691  # Calculate bin widths at the edges
    -
    1692  xw1 = x_bins[1] - x_bins[0]
    -
    1693  xw2 = x_bins[-1] - x_bins[-2]
    -
    1694  yw1 = y_bins[1] - y_bins[0]
    -
    1695  yw2 = y_bins[-1] - y_bins[-2]
    -
    1696 
    -
    1697  # Set the edges of the outer framing bins and the adjusted
    -
    1698  # edge of the real edge bins
    -
    1699  x_new[0] = x_bins[0] - 2 * xw1 * 0.02
    -
    1700  x_new[1] = x_bins[0] - 1 * xw1 * 0.02
    -
    1701  x_new[-1] = x_bins[-1] + 2 * xw2 * 0.02
    -
    1702  x_new[-2] = x_bins[-1] + 1 * xw2 * 0.02
    -
    1703  y_new[0] = y_bins[0] - 2 * yw1 * 0.02
    -
    1704  y_new[1] = y_bins[0] - 1 * yw1 * 0.02
    -
    1705  y_new[-1] = y_bins[-1] + 2 * yw2 * 0.02
    -
    1706  y_new[-2] = y_bins[-1] + 1 * yw2 * 0.02
    -
    1707 
    -
    1708  # Copy the remaining bin edges from the hist
    -
    1709  for i in range(0, len(x_bins)):
    -
    1710  x_new[i + 2] = x_bins[i]
    -
    1711  for i in range(0, len(y_bins)):
    -
    1712  y_new[i + 2] = y_bins[i]
    -
    1713 
    -
    1714  # print x_new
    -
    1715  # print y_new
    -
    1716 
    -
    1717  framed = R.TH2D('%s framed' % hist.GetName(), '%s framed' % hist.GetTitle(), len(
    -
    1718  x_new) - 1, array('d', x_new), len(y_new) - 1, array('d', y_new))
    -
    1719  framed.SetDirectory(0)
    -
    1720 
    -
    1721  for x in range(1, framed.GetNbinsX() + 1):
    -
    1722  for y in range(1, framed.GetNbinsY() + 1):
    -
    1723  if x == 1 or x == framed.GetNbinsX() or y == 1 or y == framed.GetNbinsY():
    -
    1724  # This is a a frame bin
    -
    1725  framed.SetBinContent(x, y, frameValue)
    -
    1726  else:
    -
    1727  # adjust x and y if we're in the first frame so as to copy the output
    -
    1728  # values from the real TH2
    -
    1729  ux = x
    -
    1730  uy = y
    -
    1731  if x == 2:
    -
    1732  ux += 1
    -
    1733  elif x == (len(x_new) - 2):
    -
    1734  ux -= 1
    -
    1735  if y == 2:
    -
    1736  uy += 1
    -
    1737  elif y == (len(y_new) - 2):
    -
    1738  uy -= 1
    -
    1739  framed.SetBinContent(x, y, hist.GetBinContent(ux - 2, uy - 2))
    -
    1740  return framed
    -
    1741 
    -
    1742 def fastFillTH2(hist2d, graph, initalValue=99999, interpolateMissing=False):
    -
    1743  for x in range(1,hist2d.GetNbinsX()+1):
    -
    1744  for y in range(1,hist2d.GetNbinsY()+1):
    -
    1745  hist2d.SetBinContent(x,y,initalValue)
    -
    1746  # for i in xrange(graph.GetN()):
    -
    1747  # hist2d.Fill(graph.GetX()[i],graph.GetY()[i],graph.GetZ()[i])
    -
    1748  for i in range(graph.GetN()):
    -
    1749  xbin = hist2d.GetXaxis().FindBin(graph.GetX()[i])
    -
    1750  ybin = hist2d.GetYaxis().FindBin(graph.GetY()[i])
    -
    1751  if isclose(hist2d.GetXaxis().GetBinCenter(xbin), graph.GetX()[i], rel_tol=1e-2) and isclose(hist2d.GetYaxis().GetBinCenter(ybin), graph.GetY()[i], rel_tol=1e-2):
    -
    1752  hist2d.SetBinContent(xbin, ybin, graph.GetZ()[i])
    -
    1753  interpolated = 0
    -
    1754  if interpolateMissing:
    -
    1755  for x in range(1,hist2d.GetNbinsX()+1):
    -
    1756  for y in range(1,hist2d.GetNbinsY()+1):
    -
    1757  if hist2d.GetBinContent(x,y) == initalValue:
    -
    1758  interpolated += 1
    -
    1759  hist2d.SetBinContent(x, y, graph.Interpolate(hist2d.GetXaxis().GetBinCenter(x),hist2d.GetYaxis().GetBinCenter(y)))
    -
    1760 
    -
    1761 def fillTH2(hist2d, graph):
    -
    1762  for x in range(1, hist2d.GetNbinsX() + 1):
    -
    1763  for y in range(1, hist2d.GetNbinsY() + 1):
    -
    1764  xc = hist2d.GetXaxis().GetBinCenter(x)
    -
    1765  yc = hist2d.GetYaxis().GetBinCenter(y)
    -
    1766  val = graph.Interpolate(xc, yc)
    -
    1767  hist2d.SetBinContent(x, y, val)
    -
    1768 
    -
    1769 def fillInvertedTH2(hist2d, graph):
    -
    1770  for x in range(1, hist2d.GetNbinsX() + 1):
    -
    1771  for y in range(1, hist2d.GetNbinsY() + 1):
    -
    1772  xc = hist2d.GetXaxis().GetBinCenter(x)
    -
    1773  yc = hist2d.GetYaxis().GetBinCenter(y)
    -
    1774  val = graph.Interpolate(xc, yc)
    -
    1775  hist2d.SetBinContent(x, y, 1-val)
    -
    1776 
    +
    1675 
    +
    1676 def frameTH2D(hist, threshold, frameValue=1000):
    +
    1677  # Now supports variable-binned histograms First adds a narrow frame (1% of
    +
    1678  # of bin widths) around the outside with same values as the real edge. Then
    +
    1679  # adds another frame another frame around this one filled with some chosen
    +
    1680  # value that will make the contours close
    +
    1681 
    +
    1682  # Get lists of the bin edges
    +
    1683  x_bins = [hist.GetXaxis().GetBinLowEdge(x)
    +
    1684  for x in range(1, hist.GetNbinsX() + 2)]
    +
    1685  y_bins = [hist.GetYaxis().GetBinLowEdge(y)
    +
    1686  for y in range(1, hist.GetNbinsY() + 2)]
    +
    1687 
    +
    1688  # New bin edge arrays will need an extra four values
    +
    1689  x_new = [0.] * (len(x_bins) + 4)
    +
    1690  y_new = [0.] * (len(y_bins) + 4)
    +
    1691 
    +
    1692  # Calculate bin widths at the edges
    +
    1693  xw1 = x_bins[1] - x_bins[0]
    +
    1694  xw2 = x_bins[-1] - x_bins[-2]
    +
    1695  yw1 = y_bins[1] - y_bins[0]
    +
    1696  yw2 = y_bins[-1] - y_bins[-2]
    +
    1697 
    +
    1698  # Set the edges of the outer framing bins and the adjusted
    +
    1699  # edge of the real edge bins
    +
    1700  x_new[0] = x_bins[0] - 2 * xw1 * 0.02
    +
    1701  x_new[1] = x_bins[0] - 1 * xw1 * 0.02
    +
    1702  x_new[-1] = x_bins[-1] + 2 * xw2 * 0.02
    +
    1703  x_new[-2] = x_bins[-1] + 1 * xw2 * 0.02
    +
    1704  y_new[0] = y_bins[0] - 2 * yw1 * 0.02
    +
    1705  y_new[1] = y_bins[0] - 1 * yw1 * 0.02
    +
    1706  y_new[-1] = y_bins[-1] + 2 * yw2 * 0.02
    +
    1707  y_new[-2] = y_bins[-1] + 1 * yw2 * 0.02
    +
    1708 
    +
    1709  # Copy the remaining bin edges from the hist
    +
    1710  for i in range(0, len(x_bins)):
    +
    1711  x_new[i + 2] = x_bins[i]
    +
    1712  for i in range(0, len(y_bins)):
    +
    1713  y_new[i + 2] = y_bins[i]
    +
    1714 
    +
    1715  # print x_new
    +
    1716  # print y_new
    +
    1717 
    +
    1718  framed = R.TH2D('%s framed' % hist.GetName(), '%s framed' % hist.GetTitle(), len(
    +
    1719  x_new) - 1, array('d', x_new), len(y_new) - 1, array('d', y_new))
    +
    1720  framed.SetDirectory(0)
    +
    1721 
    +
    1722  for x in range(1, framed.GetNbinsX() + 1):
    +
    1723  for y in range(1, framed.GetNbinsY() + 1):
    +
    1724  if x == 1 or x == framed.GetNbinsX() or y == 1 or y == framed.GetNbinsY():
    +
    1725  # This is a a frame bin
    +
    1726  framed.SetBinContent(x, y, frameValue)
    +
    1727  else:
    +
    1728  # adjust x and y if we're in the first frame so as to copy the output
    +
    1729  # values from the real TH2
    +
    1730  ux = x
    +
    1731  uy = y
    +
    1732  if x == 2:
    +
    1733  ux += 1
    +
    1734  elif x == (len(x_new) - 2):
    +
    1735  ux -= 1
    +
    1736  if y == 2:
    +
    1737  uy += 1
    +
    1738  elif y == (len(y_new) - 2):
    +
    1739  uy -= 1
    +
    1740  framed.SetBinContent(x, y, hist.GetBinContent(ux - 2, uy - 2))
    +
    1741  return framed
    +
    1742 
    +
    1743 def fastFillTH2(hist2d, graph, initalValue=99999, interpolateMissing=False):
    +
    1744  for x in range(1,hist2d.GetNbinsX()+1):
    +
    1745  for y in range(1,hist2d.GetNbinsY()+1):
    +
    1746  hist2d.SetBinContent(x,y,initalValue)
    +
    1747  # for i in xrange(graph.GetN()):
    +
    1748  # hist2d.Fill(graph.GetX()[i],graph.GetY()[i],graph.GetZ()[i])
    +
    1749  for i in range(graph.GetN()):
    +
    1750  xbin = hist2d.GetXaxis().FindBin(graph.GetX()[i])
    +
    1751  ybin = hist2d.GetYaxis().FindBin(graph.GetY()[i])
    +
    1752  if isclose(hist2d.GetXaxis().GetBinCenter(xbin), graph.GetX()[i], rel_tol=1e-2) and isclose(hist2d.GetYaxis().GetBinCenter(ybin), graph.GetY()[i], rel_tol=1e-2):
    +
    1753  hist2d.SetBinContent(xbin, ybin, graph.GetZ()[i])
    +
    1754  interpolated = 0
    +
    1755  if interpolateMissing:
    +
    1756  for x in range(1,hist2d.GetNbinsX()+1):
    +
    1757  for y in range(1,hist2d.GetNbinsY()+1):
    +
    1758  if hist2d.GetBinContent(x,y) == initalValue:
    +
    1759  interpolated += 1
    +
    1760  hist2d.SetBinContent(x, y, graph.Interpolate(hist2d.GetXaxis().GetBinCenter(x),hist2d.GetYaxis().GetBinCenter(y)))
    +
    1761 
    +
    1762 def fillTH2(hist2d, graph):
    +
    1763  for x in range(1, hist2d.GetNbinsX() + 1):
    +
    1764  for y in range(1, hist2d.GetNbinsY() + 1):
    +
    1765  xc = hist2d.GetXaxis().GetBinCenter(x)
    +
    1766  yc = hist2d.GetYaxis().GetBinCenter(y)
    +
    1767  val = graph.Interpolate(xc, yc)
    +
    1768  hist2d.SetBinContent(x, y, val)
    +
    1769 
    +
    1770 def fillInvertedTH2(hist2d, graph):
    +
    1771  for x in range(1, hist2d.GetNbinsX() + 1):
    +
    1772  for y in range(1, hist2d.GetNbinsY() + 1):
    +
    1773  xc = hist2d.GetXaxis().GetBinCenter(x)
    +
    1774  yc = hist2d.GetYaxis().GetBinCenter(y)
    +
    1775  val = graph.Interpolate(xc, yc)
    +
    1776  hist2d.SetBinContent(x, y, 1-val)
    1777 
    1778 
    -
    1779 # Functions 'NewInterpolate' and 'rebin' are taken, translated and modified into python from:
    -
    1780 # https://indico.cern.ch/event/256523/contribution/2/attachments/450198/624259/07JUN2013_cawest.pdf
    -
    1781 # http://hep.ucsb.edu/people/cawest/interpolation/interpolate.h
    -
    1782 def NewInterpolate(hist):
    -
    1783  histCopy = hist.Clone()
    -
    1784 
    -
    1785  # make temporary histograms to store the results of both steps
    -
    1786  hist_step1 = histCopy.Clone()
    -
    1787  hist_step1.Reset()
    -
    1788  hist_step2 = histCopy.Clone()
    -
    1789  hist_step2.Reset()
    -
    1790 
    -
    1791  nBinsX = histCopy.GetNbinsX()
    -
    1792  nBinsY = histCopy.GetNbinsY()
    -
    1793 
    -
    1794  xMin = 1
    -
    1795  yMin = 1
    -
    1796  xMax = histCopy.GetNbinsX() + 1
    -
    1797  yMax = histCopy.GetNbinsY() + 1
    -
    1798 
    -
    1799  for i in range(1, nBinsX + 1):
    -
    1800  for j in range(1, nBinsY + 1):
    -
    1801  # do not extrapolate outside the scan
    -
    1802  if (i < xMin) or (i > xMax) or (j < yMin) or (j > yMax):
    -
    1803  continue
    -
    1804  binContent = histCopy.GetBinContent(i, j)
    -
    1805  binContentNW = histCopy.GetBinContent(i + 1, j + 1)
    -
    1806  binContentSE = histCopy.GetBinContent(i - 1, j - 1)
    -
    1807  binContentNE = histCopy.GetBinContent(i + 1, j - 1)
    -
    1808  binContentSW = histCopy.GetBinContent(i - 1, j + 1)
    -
    1809  binContentUp = histCopy.GetBinContent(i, j + 1)
    -
    1810  binContentDown = histCopy.GetBinContent(i, j - 1)
    -
    1811  binContentLeft = histCopy.GetBinContent(i - 1, j)
    -
    1812  binContentRight = histCopy.GetBinContent(i + 1, j)
    -
    1813  nFilled = 0
    -
    1814  if(binContentNW > 0):
    -
    1815  nFilled += 1
    -
    1816  if(binContentSE > 0):
    -
    1817  nFilled += 1
    -
    1818  if(binContentNE > 0):
    -
    1819  nFilled += 1
    -
    1820  if(binContentSW > 0):
    -
    1821  nFilled += 1
    -
    1822  if(binContentUp > 0):
    -
    1823  nFilled += 1
    -
    1824  if(binContentDown > 0):
    -
    1825  nFilled += 1
    -
    1826  if(binContentRight > 0):
    -
    1827  nFilled += 1
    -
    1828  if(binContentLeft > 0):
    -
    1829  nFilled += 1
    -
    1830  # if we are at an empty bin and there are neighbors
    -
    1831  # in specified direction with non-zero entries
    -
    1832  if(binContent == 0) and (nFilled > 1):
    -
    1833  # average over non-zero entries
    -
    1834  binContent = (binContentNW + binContentSE + binContentNE + binContentSW +
    -
    1835  binContentUp + binContentDown + binContentRight + binContentLeft) / nFilled
    -
    1836  hist_step1.SetBinContent(i, j, binContent)
    -
    1837 
    -
    1838  # add result of interpolation
    -
    1839  histCopy.Add(hist_step1)
    -
    1840 
    -
    1841  for i in range(1, nBinsX):
    -
    1842  for j in range(1, nBinsY):
    -
    1843  if(i < xMin) or (i > xMax) or (j < yMin) or (j > yMax):
    -
    1844  continue
    -
    1845  binContent = histCopy.GetBinContent(i, j)
    -
    1846  # get entries for "Swiss Cross" average
    -
    1847  binContentUp = histCopy.GetBinContent(i, j + 1)
    -
    1848  binContentDown = histCopy.GetBinContent(i, j - 1)
    -
    1849  binContentLeft = histCopy.GetBinContent(i - 1, j)
    -
    1850  binContentRight = histCopy.GetBinContent(i + 1, j)
    -
    1851  nFilled = 0
    -
    1852  if(binContentUp > 0):
    -
    1853  nFilled += 1
    -
    1854  if(binContentDown > 0):
    -
    1855  nFilled += 1
    -
    1856  if(binContentRight > 0):
    -
    1857  nFilled += 1
    -
    1858  if(binContentLeft > 0):
    -
    1859  nFilled += 1
    -
    1860  if(binContent == 0) and (nFilled > 0):
    -
    1861  # only average over non-zero entries
    -
    1862  binContent = (
    -
    1863  binContentUp + binContentDown + binContentRight + binContentLeft) / nFilled
    -
    1864  hist_step2.SetBinContent(i, j, binContent)
    -
    1865  # add "Swiss Cross" average
    -
    1866  histCopy.Add(hist_step2)
    -
    1867 
    -
    1868  return histCopy
    -
    1869 
    +
    1779 
    +
    1780 # Functions 'NewInterpolate' and 'rebin' are taken, translated and modified into python from:
    +
    1781 # https://indico.cern.ch/event/256523/contribution/2/attachments/450198/624259/07JUN2013_cawest.pdf
    +
    1782 # http://hep.ucsb.edu/people/cawest/interpolation/interpolate.h
    +
    1783 def NewInterpolate(hist):
    +
    1784  histCopy = hist.Clone()
    +
    1785 
    +
    1786  # make temporary histograms to store the results of both steps
    +
    1787  hist_step1 = histCopy.Clone()
    +
    1788  hist_step1.Reset()
    +
    1789  hist_step2 = histCopy.Clone()
    +
    1790  hist_step2.Reset()
    +
    1791 
    +
    1792  nBinsX = histCopy.GetNbinsX()
    +
    1793  nBinsY = histCopy.GetNbinsY()
    +
    1794 
    +
    1795  xMin = 1
    +
    1796  yMin = 1
    +
    1797  xMax = histCopy.GetNbinsX() + 1
    +
    1798  yMax = histCopy.GetNbinsY() + 1
    +
    1799 
    +
    1800  for i in range(1, nBinsX + 1):
    +
    1801  for j in range(1, nBinsY + 1):
    +
    1802  # do not extrapolate outside the scan
    +
    1803  if (i < xMin) or (i > xMax) or (j < yMin) or (j > yMax):
    +
    1804  continue
    +
    1805  binContent = histCopy.GetBinContent(i, j)
    +
    1806  binContentNW = histCopy.GetBinContent(i + 1, j + 1)
    +
    1807  binContentSE = histCopy.GetBinContent(i - 1, j - 1)
    +
    1808  binContentNE = histCopy.GetBinContent(i + 1, j - 1)
    +
    1809  binContentSW = histCopy.GetBinContent(i - 1, j + 1)
    +
    1810  binContentUp = histCopy.GetBinContent(i, j + 1)
    +
    1811  binContentDown = histCopy.GetBinContent(i, j - 1)
    +
    1812  binContentLeft = histCopy.GetBinContent(i - 1, j)
    +
    1813  binContentRight = histCopy.GetBinContent(i + 1, j)
    +
    1814  nFilled = 0
    +
    1815  if(binContentNW > 0):
    +
    1816  nFilled += 1
    +
    1817  if(binContentSE > 0):
    +
    1818  nFilled += 1
    +
    1819  if(binContentNE > 0):
    +
    1820  nFilled += 1
    +
    1821  if(binContentSW > 0):
    +
    1822  nFilled += 1
    +
    1823  if(binContentUp > 0):
    +
    1824  nFilled += 1
    +
    1825  if(binContentDown > 0):
    +
    1826  nFilled += 1
    +
    1827  if(binContentRight > 0):
    +
    1828  nFilled += 1
    +
    1829  if(binContentLeft > 0):
    +
    1830  nFilled += 1
    +
    1831  # if we are at an empty bin and there are neighbors
    +
    1832  # in specified direction with non-zero entries
    +
    1833  if(binContent == 0) and (nFilled > 1):
    +
    1834  # average over non-zero entries
    +
    1835  binContent = (binContentNW + binContentSE + binContentNE + binContentSW +
    +
    1836  binContentUp + binContentDown + binContentRight + binContentLeft) / nFilled
    +
    1837  hist_step1.SetBinContent(i, j, binContent)
    +
    1838 
    +
    1839  # add result of interpolation
    +
    1840  histCopy.Add(hist_step1)
    +
    1841 
    +
    1842  for i in range(1, nBinsX):
    +
    1843  for j in range(1, nBinsY):
    +
    1844  if(i < xMin) or (i > xMax) or (j < yMin) or (j > yMax):
    +
    1845  continue
    +
    1846  binContent = histCopy.GetBinContent(i, j)
    +
    1847  # get entries for "Swiss Cross" average
    +
    1848  binContentUp = histCopy.GetBinContent(i, j + 1)
    +
    1849  binContentDown = histCopy.GetBinContent(i, j - 1)
    +
    1850  binContentLeft = histCopy.GetBinContent(i - 1, j)
    +
    1851  binContentRight = histCopy.GetBinContent(i + 1, j)
    +
    1852  nFilled = 0
    +
    1853  if(binContentUp > 0):
    +
    1854  nFilled += 1
    +
    1855  if(binContentDown > 0):
    +
    1856  nFilled += 1
    +
    1857  if(binContentRight > 0):
    +
    1858  nFilled += 1
    +
    1859  if(binContentLeft > 0):
    +
    1860  nFilled += 1
    +
    1861  if(binContent == 0) and (nFilled > 0):
    +
    1862  # only average over non-zero entries
    +
    1863  binContent = (
    +
    1864  binContentUp + binContentDown + binContentRight + binContentLeft) / nFilled
    +
    1865  hist_step2.SetBinContent(i, j, binContent)
    +
    1866  # add "Swiss Cross" average
    +
    1867  histCopy.Add(hist_step2)
    +
    1868 
    +
    1869  return histCopy
    1870 
    -
    1871 def rebin(hist):
    -
    1872  histName = hist.GetName()
    -
    1873  histName += "_rebin"
    -
    1874 
    -
    1875  # bin widths are needed so as to not shift histogram by half a bin with each rebinning
    -
    1876  # assume constant binning
    -
    1877  # binWidthX = hist.GetXaxis().GetBinWidth(1)
    -
    1878  # binWidthY = hist.GetYaxis().GetBinWidth(1)
    -
    1879 
    -
    1880  # histRebinned = R.TH2F(histName, histName, 2*hist.GetNbinsX(), hist.GetXaxis().GetXmin()+binWidthX/4, hist.GetXaxis().GetXmax()+binWidthX/4, 2*hist.GetNbinsY(), hist.GetYaxis().GetXmin()+binWidthY/4, hist.GetYaxis().GetXmax()+binWidthY/4)
    -
    1881  histRebinned = R.TH2F(histName, histName, 2 * hist.GetNbinsX() - 1, hist.GetXaxis().GetXmin(),
    -
    1882  hist.GetXaxis().GetXmax(), 2 * hist.GetNbinsY() - 1, hist.GetYaxis().GetXmin(), hist.GetYaxis().GetXmax())
    -
    1883 
    -
    1884  # copy results from previous histogram
    -
    1885  for iX in range(1, hist.GetNbinsX() + 1):
    -
    1886  for iY in range(1, hist.GetNbinsY() + 1):
    -
    1887  binContent = hist.GetBinContent(iX, iY)
    -
    1888  histRebinned.SetBinContent(2 * iX - 1, 2 * iY - 1, binContent)
    -
    1889  histRebinned.SetMaximum(hist.GetMaximum())
    -
    1890  histRebinned.SetMinimum(hist.GetMinimum())
    -
    1891 
    -
    1892  # use interpolation to re-fill histogram
    -
    1893  histRebinnedInterpolated = NewInterpolate(histRebinned)
    -
    1894 
    -
    1895  return histRebinnedInterpolated
    -
    1896 
    +
    1871 
    +
    1872 def rebin(hist):
    +
    1873  histName = hist.GetName()
    +
    1874  histName += "_rebin"
    +
    1875 
    +
    1876  # bin widths are needed so as to not shift histogram by half a bin with each rebinning
    +
    1877  # assume constant binning
    +
    1878  # binWidthX = hist.GetXaxis().GetBinWidth(1)
    +
    1879  # binWidthY = hist.GetYaxis().GetBinWidth(1)
    +
    1880 
    +
    1881  # histRebinned = R.TH2F(histName, histName, 2*hist.GetNbinsX(), hist.GetXaxis().GetXmin()+binWidthX/4, hist.GetXaxis().GetXmax()+binWidthX/4, 2*hist.GetNbinsY(), hist.GetYaxis().GetXmin()+binWidthY/4, hist.GetYaxis().GetXmax()+binWidthY/4)
    +
    1882  histRebinned = R.TH2F(histName, histName, 2 * hist.GetNbinsX() - 1, hist.GetXaxis().GetXmin(),
    +
    1883  hist.GetXaxis().GetXmax(), 2 * hist.GetNbinsY() - 1, hist.GetYaxis().GetXmin(), hist.GetYaxis().GetXmax())
    +
    1884 
    +
    1885  # copy results from previous histogram
    +
    1886  for iX in range(1, hist.GetNbinsX() + 1):
    +
    1887  for iY in range(1, hist.GetNbinsY() + 1):
    +
    1888  binContent = hist.GetBinContent(iX, iY)
    +
    1889  histRebinned.SetBinContent(2 * iX - 1, 2 * iY - 1, binContent)
    +
    1890  histRebinned.SetMaximum(hist.GetMaximum())
    +
    1891  histRebinned.SetMinimum(hist.GetMinimum())
    +
    1892 
    +
    1893  # use interpolation to re-fill histogram
    +
    1894  histRebinnedInterpolated = NewInterpolate(histRebinned)
    +
    1895 
    +
    1896  return histRebinnedInterpolated
    1897 
    -
    1898 def higgsConstraint(model, higgstype):
    -
    1899  higgsBand = R.TGraph2D()
    -
    1900  masslow = 150
    -
    1901  masshigh = 500
    -
    1902  massstep = 10
    -
    1903  n = 0
    -
    1904  for mass in range(masslow, masshigh, massstep):
    -
    1905  myfile = open("../../HiggsAnalysis/HiggsToTauTau/data/Higgs125/" +
    -
    1906  model + "/higgs_" + str(mass) + ".dat", 'r')
    -
    1907  for line in myfile:
    -
    1908  tanb = (line.split())[0]
    -
    1909  mh = float((line.split())[1])
    -
    1910  mH = float((line.split())[3])
    -
    1911  if higgstype == "h":
    -
    1912  higgsBand.SetPoint(n, mass, float(tanb), mh)
    -
    1913  elif higgstype == "H":
    -
    1914  higgsBand.SetPoint(n, mass, float(tanb), mH)
    -
    1915  n = n + 1
    -
    1916  myfile.close()
    -
    1917  return higgsBand
    -
    1918 
    +
    1898 
    +
    1899 def higgsConstraint(model, higgstype):
    +
    1900  higgsBand = R.TGraph2D()
    +
    1901  masslow = 150
    +
    1902  masshigh = 500
    +
    1903  massstep = 10
    +
    1904  n = 0
    +
    1905  for mass in range(masslow, masshigh, massstep):
    +
    1906  myfile = open("../../HiggsAnalysis/HiggsToTauTau/data/Higgs125/" +
    +
    1907  model + "/higgs_" + str(mass) + ".dat", 'r')
    +
    1908  for line in myfile:
    +
    1909  tanb = (line.split())[0]
    +
    1910  mh = float((line.split())[1])
    +
    1911  mH = float((line.split())[3])
    +
    1912  if higgstype == "h":
    +
    1913  higgsBand.SetPoint(n, mass, float(tanb), mh)
    +
    1914  elif higgstype == "H":
    +
    1915  higgsBand.SetPoint(n, mass, float(tanb), mH)
    +
    1916  n = n + 1
    +
    1917  myfile.close()
    +
    1918  return higgsBand
    1919 
    -
    1920 def getOverlayMarkerAndLegend(legend, entries, options, borderSize=2.0/3, markerStyle="P"):
    -
    1921  borderLegend = legend.Clone()
    -
    1922  borderLegend.Clear()
    -
    1923  graphs = []
    -
    1924  for i in range(legend.GetNRows()):
    -
    1925  if i in entries:
    -
    1926  graph = entries[i].Clone()
    -
    1927  options[i]["MarkerSize"] = graph.GetMarkerSize()*borderSize
    -
    1928  Set(graph,**options[i])
    -
    1929  borderLegend.AddEntry(graph, " ", markerStyle)
    -
    1930  graphs.append(graph)
    -
    1931  else:
    -
    1932  borderLegend.AddEntry("", " ", "")
    -
    1933  borderLegend.SetFillStyle(0)
    -
    1934  borderLegend.SetFillColor(0)
    -
    1935  return (borderLegend,graphs)
    +
    1920 
    +
    1921 def getOverlayMarkerAndLegend(legend, entries, options, borderSize=2.0/3, markerStyle="P"):
    +
    1922  borderLegend = legend.Clone()
    +
    1923  borderLegend.Clear()
    +
    1924  graphs = []
    +
    1925  for i in range(legend.GetNRows()):
    +
    1926  if i in entries:
    +
    1927  graph = entries[i].Clone()
    +
    1928  options[i]["MarkerSize"] = graph.GetMarkerSize()*borderSize
    +
    1929  Set(graph,**options[i])
    +
    1930  borderLegend.AddEntry(graph, " ", markerStyle)
    +
    1931  graphs.append(graph)
    +
    1932  else:
    +
    1933  borderLegend.AddEntry("", " ", "")
    +
    1934  borderLegend.SetFillStyle(0)
    +
    1935  borderLegend.SetFillColor(0)
    +
    1936  return (borderLegend,graphs)
    +
    void FixBoxPadding(TPad *pad, TBox *box, double frac)
    Modify the pad y-axis range to ensure there is at least a given gap between a particular TBox and the...
    Definition: Plotting.h:902
    +
    void DrawTitle(TPad *pad, TString text, int align)
    Draw text in the top-margin region of a TPad.
    Definition: Plotting.h:713
    +
    void FixOverlay()
    Just re-draws the axes on the current TPad.
    Definition: Plotting.h:945
    +
    TH1 * MakeRatioHist(TH1 *num, TH1 *den, bool num_err, bool den_err)
    Create a new histogram by dividing one by the other.
    Definition: Plotting.h:567
    +
    void FixTopRange(TPad *pad, double fix_y, double fraction)
    Adjusts the y-axis maximum on the pad such that the specified y-value is positioned a fixed fraction ...
    Definition: Plotting.h:885
    +
    TLegend * PositionedLegend(double width, double height, int pos, double offset)
    Create a legend with fixed height, width and positioning.
    Definition: Plotting.h:669
    +
    TGraph TGraphFromTree(TTree *tree, TString const &xvar, TString const &yvar, TString const &selection="")
    Create a TGraph from entries in a TTree.
    Definition: Plotting.h:581
    +
    double GetPadYMax(TPad *pad, double x_min, double x_max)
    Find the maximum value of all drawn objects in a given x-axis range.
    Definition: Plotting.h:844
    +
    void StandardAxes(TAxis *xaxis, TAxis *yaxis, TString var, TString units)
    Sets standard x- and y-axis titles with given units.
    Definition: Plotting.h:651
    +
    std::vector< TPad * > OnePad()
    Just creates a single pad filling the entire canvas.
    Definition: Plotting.h:459
    +
    TLine * DrawHorizontalLine(TPad *pad, TLine *line, double yval)
    Use an existing TLine to draw a new horizontal line across the current frame.
    Definition: Plotting.h:705
    +
    std::vector< TH1 * > CreateAxisHists(unsigned n, TH1 *src, double xmin=0, double xmax=-1)
    Create multiple axis TH1s from another TH1.
    Definition: Plotting.h:494
    +
    TH1 * GetAxisHist(TPad *pad)
    Finds the TH1 used to draw the axes on a given TPad.
    Definition: Plotting.h:536
    +
    void SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TH1 *upper, TH1 *lower, TString y_title, bool y_centered, float y_min, float y_max)
    Set a few style options for a two-pad setup used to show a data-MC comparison and ratio plot.
    Definition: Plotting.h:632
    +
    void DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX, float relPosX, float relPosY, float relExtraDY)
    Draw the CMS logo and subtitle in the new style.
    Definition: Plotting.h:744
    +
    TH1 * CreateAxisHist(TH1 *src, double xmin=0, double xmax=-1)
    Create an empty TH1 from another TH1 for drawing the axes.
    Definition: Plotting.h:485
    +
    int CreateTransparentColor(int color, float alpha)
    Create a transparent version of a colour.
    Definition: Plotting.h:614
    +
    std::vector< TPad * > TwoPadSplit(double split_point, double gap_low, double gap_high)
    Create two pads, split horizontally, on the current canvas split.
    Definition: Plotting.h:468
    +
    void ReZeroTGraph(TGraph *gr)
    Shift all the graph y-values upwards such that there are no negative values and the minimum point is ...
    Definition: Plotting.h:595
    +
    TGraph2D TGraph2DFromTree(TTree *tree, TString const &xvar, TString const &yvar, TString const &zvar, TString const &selection="")
    Create a TGraph2D from entries in a TTree.
    Definition: Plotting.h:588
    +
    TH2D * frameTH2D(TH2D *in, double threshold)
    +
    TGraph * bestFit(TTree *t, TString x, TString y, TCut cut)
    +
    TList * contourFromTH2(TH2 *h2in, double threshold, int minPoints=20)
    +
    TH2 * treeToHist2D(TTree *t, TString x, TString y, TString name, TCut cut, double xmin, double xmax, double ymin, double ymax, int xbins, int ybins)
    +
    void SetTDRStyle()
    Sets the semi-official CMS plotting global style.
    +
    void ModTDRStyle(int width, int height, double t, double b, double l, double r)
    Sets an improved plotting style, using the CMS default as a base.
    -
    def SetBirdPalette()
    Definition: plotting.py:251
    -
    def LimitTGraphFromJSON(js, label)
    Definition: plotting.py:730
    -
    def Get(file, obj)
    Definition: plotting.py:552
    -
    def SetupTwoPadSplitAsRatio(pads, upper, lower, y_title, y_centered, y_min, y_max)
    Definition: plotting.py:419
    -
    def Set(obj, **kwargs)
    Definition: plotting.py:296
    -
    def makeHist1D(name, xbins, graph, scaleXrange=1.0, absoluteXrange=None)
    Definition: plotting.py:838
    -
    def TwoPadSplit(split_point, gap_low, gap_high)
    Definition: plotting.py:322
    -
    def DrawVerticalBand(pad, box, x1, x2)
    Definition: plotting.py:1532
    -
    def SetDeepSeaPalette()
    Definition: plotting.py:264
    -
    def FindCrossingsWithSpline(graph, func, yval)
    Definition: plotting.py:1040
    -
    def FixOverlay()
    Definition: plotting.py:1323
    -
    def RemoveGraphYAll(graph, val)
    Definition: plotting.py:962
    -
    def MakeErrorBand(LowerGraph, UpperGraph)
    Definition: plotting.py:712
    -
    def RemoveInXRange(gr, xmin=0, xmax=1)
    Definition: plotting.py:1126
    -
    def frameTH2D(hist, threshold, frameValue=1000)
    Definition: plotting.py:1675
    -
    def TGraph2DFromTree(tree, xvar, yvar, zvar, selection)
    Definition: plotting.py:587
    -
    def ToyTGraphFromJSON(js, label)
    Definition: plotting.py:746
    -
    def fillTH2(hist2d, graph)
    Definition: plotting.py:1761
    -
    def StyleLimitBand(graph_dict, overwrite_style_dict=None)
    Definition: plotting.py:1586
    -
    def treeToHist2D(t, x, y, name, cut, xmin, xmax, ymin, ymax, xbins, ybins)
    Definition: plotting.py:820
    -
    def higgsConstraint(model, higgstype)
    Definition: plotting.py:1898
    -
    def contourFromTH2(h2in, threshold, minPoints=10, frameValue=1000.)
    Definition: plotting.py:1636
    -
    def SetTDRStyle()
    Sets the PubComm recommended style.
    Definition: plotting.py:26
    -
    def GetPadYMax(pad, do_min=False)
    Definition: plotting.py:1310
    -
    def ReZeroTGraph(gr, doIt=False)
    Definition: plotting.py:1087
    -
    def TGraphFromTree(tree, xvar, yvar, selection)
    Definition: plotting.py:581
    -
    def ToyTGraphFromJSONFile(jsfile, label)
    Definition: plotting.py:768
    -
    def FixBothRanges(pad, fix_y_lo, frac_lo, fix_y_hi, frac_hi)
    Adjusts y-axis range such that a lower and a higher value are located a fixed fraction of the frame h...
    Definition: plotting.py:1226
    -
    def bestFit(tree, x, y, cut)
    Definition: plotting.py:805
    -
    def DrawCMSLogo(pad, cmsText, extraText, iPosX, relPosX, relPosY, relExtraDY, extraText2='', cmsTextSize=0.8)
    Blah.
    Definition: plotting.py:1399
    -
    def FilterGraph(gr, n=3)
    Definition: plotting.py:1112
    -
    def fastFillTH2(hist2d, graph, initalValue=99999, interpolateMissing=False)
    Definition: plotting.py:1742
    -
    def GetPadYMaxInRange(pad, x_min, x_max, do_min=False)
    Definition: plotting.py:1252
    -
    def RocCurveFrom1DHists(h_x, h_y, cut_is_greater_than)
    Definition: plotting.py:594
    -
    def DrawHorizontalLine(pad, line, yval)
    Definition: plotting.py:1519
    -
    def StandardLimitsFromJSONFile(json_file, draw=['obs', 'exp0', 'exp1', 'exp2'])
    Definition: plotting.py:789
    -
    def TH2FromTGraph2D(graph, method='BinEdgeAligned', force_x_width=None, force_y_width=None)
    Build an empty TH2 from the set of points in a TGraph2D.
    Definition: plotting.py:670
    -
    def CreateAxisHist(src, at_limits=True)
    Definition: plotting.py:460
    -
    def GraphDivide(num, den)
    Definition: plotting.py:904
    -
    def LimitTGraphFromJSONFile(jsfile, label)
    Definition: plotting.py:741
    -
    def MakeTChain(files, tree)
    Definition: plotting.py:545
    -
    def CreateTransparentColor(color, alpha)
    Definition: plotting.py:286
    -
    def ParamFromFilename(filename, param)
    Definition: plotting.py:560
    -
    def getOverlayMarkerAndLegend(legend, entries, options, borderSize=2.0/3, markerStyle="P")
    Definition: plotting.py:1920
    -
    def ModTDRStyle(width=600, height=600, t=0.06, b=0.12, l=0.16, r=0.04)
    Modified version of the tdrStyle.
    Definition: plotting.py:177
    -
    def makeVarBinHist2D(name, xbins, ybins)
    Definition: plotting.py:859
    -
    def ApplyGraphYOffset(graph, y_off)
    Definition: plotting.py:957
    -
    def NewInterpolate(hist)
    Definition: plotting.py:1782
    -
    def ThreePadSplit(upper_split_point, split_point, gap_low, gap_high)
    Definition: plotting.py:335
    -
    def FixBoxPadding(pad, box, frac)
    Definition: plotting.py:1328
    -
    def DrawVerticalLine(pad, line, xval)
    Definition: plotting.py:1526
    -
    def ImproveMinimum(graph, func, doIt=False)
    Definition: plotting.py:1003
    -
    def PositionedLegend(width, height, pos, offset, horizontaloffset=None)
    Definition: plotting.py:1492
    -
    def LimitBandTGraphFromJSON(js, central, lo, hi)
    Definition: plotting.py:773
    - -
    def GetPadYMin(pad)
    Definition: plotting.py:1319
    -
    def MultiRatioSplitColumns(split_points, gaps_left, gaps_right)
    Definition: plotting.py:403
    -
    def DrawTitle(pad, text, align, textOffset=0.2, textSize=0.6)
    Definition: plotting.py:1539
    -
    def FixTopRange(pad, fix_y, fraction)
    Definition: plotting.py:1186
    -
    def TFileIsGood(filename)
    Performs a series of tests on a TFile to ensure that it can be opened without errors.
    Definition: plotting.py:527
    -
    def RemoveGraphXDuplicates(graph)
    Definition: plotting.py:947
    -
    def RemoveNearMin(graph, val, spacing=None)
    Definition: plotting.py:1138
    -
    def RemoveGraphYAbove(graph, val)
    Definition: plotting.py:981
    -
    def isclose(a, b, rel_tol=1e-9, abs_tol=0.0)
    Definition: plotting.py:1583
    -
    def CreateAxisHists(n, src, at_limits)
    Definition: plotting.py:485
    -
    def GraphDifference(graph1, graph2, relative)
    Definition: plotting.py:888
    -
    def MakeRatioHist(num, den, num_err, den_err)
    Make a new ratio TH1 from numerator and denominator TH1s with optional error propagation.
    Definition: plotting.py:928
    -
    def SetCorrMatrixPalette()
    Definition: plotting.py:277
    -
    def makeHist2D(name, xbins, ybins, graph2d)
    Definition: plotting.py:849
    -
    def MultiRatioSplit(split_points, gaps_low, gaps_high)
    Create a set of TPads split vertically on the TCanvas.
    Definition: plotting.py:374
    -
    def DrawLimitBand(pad, graph_dict, draw=['exp2', 'exp1', 'exp0', 'obs'], draw_legend=None, legend=None, legend_overwrite=None)
    Definition: plotting.py:1602
    -
    def GetAxisHist(pad)
    Definition: plotting.py:493
    -
    def StandardAxes(xaxis, yaxis, var, units, fmt='.1f')
    Definition: plotting.py:437
    -
    def SetMinToZero(graph)
    Definition: plotting.py:991
    -
    def fillInvertedTH2(hist2d, graph)
    Definition: plotting.py:1769
    -
    def rebin(hist)
    Definition: plotting.py:1871
    -
    def RemoveSmallDelta(graph, val)
    Definition: plotting.py:971
    -
    def TwoPadSplitColumns(split_point, gap_left, gap_right)
    Definition: plotting.py:389
    -
    def SortGraph(Graph)
    Definition: plotting.py:1166
    diff --git a/post-fit-shapes-ws.html b/post-fit-shapes-ws.html index d61c4f0adbe..1c25d8fcb2b 100644 --- a/post-fit-shapes-ws.html +++ b/post-fit-shapes-ws.html @@ -4,7 +4,7 @@ - + CombineHarvester: Post-fit Distributions @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@ - + @@ -83,7 +80,7 @@
    @@ -106,7 +103,8 @@
    Post-fit Distributions
    -

    File: CombineTools/test/PostFitShapesFromWorkspace.cpp

    +

    +

    File: CombineTools/test/PostFitShapesFromWorkspace.cpp

    The program PostFitShapesFromWorkspace is used to dump a set of pre- and post-fit distributions from a datacard. There is no need to specify which categories or processes to extract, this will be done automatically and so should work for any shape-based analysis. The effect of all normalisation and shape uncertainties is evaluated. In addition, there is an option to calculate post-fit/pre-fit scale factors for each background and the total background uncertainty in each category. This numbers can then be used as input for producing post-fit control distributions.

    The following options are available:

    Configuration:
       -w [ --workspace ] arg           The input workspace-containing file [REQUIRED]
    diff --git a/python-interface.html b/python-interface.html
    index 04bd71521af..9ae956f18c6 100644
    --- a/python-interface.html
    +++ b/python-interface.html
    @@ -4,7 +4,7 @@
     
     
     
    -
    +
     CombineHarvester: Python Interface
     
     
    @@ -13,10 +13,6 @@
     
     
     
    -
     
     
     
    @@ -30,7 +26,8 @@
         extensions: ["tex2jax.js"],
         jax: ["input/TeX","output/HTML-CSS"],
     });
    -
    +
    +
     
     
     
    @@ -46,7 +43,7 @@
       
                
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - +
    @@ -83,7 +80,7 @@
    @@ -123,17 +120,18 @@
  • Class: BinByBinFactory
  • -

    The C++ CombineHarvester class and a number of other tools have a python interface available. The module containing this interface can be imported like any other CMSSW python module:

    import CombineHarvester.CombineTools.ch as ch
    -

    The sections below summarise the methods that are currently supported.

    +

    +

    The C++ CombineHarvester class and a number of other tools have a python interface available. The module containing this interface can be imported like any other CMSSW python module:

    import CombineHarvester.CombineTools.ch as ch
    +

    The sections below summarise the methods that are currently supported.

    Constructors and copying

    C++:

    ch::CombineHarvester cb;
     ch::CombineHarvester cb_shallow_copy = cb.cp();
     ch::CombineHarvester cb_deep_copy = cb.deep();
    -

    Python:

    cb = ch.CombineHarvester()
    +

    Python:

    cb = ch.CombineHarvester()
     cb_shallow_copy = cb.cp()
     cb_deep_copy = cb.deep()
    -

    +

    Logging and Printing

    C++:

    cb.PrintAll();
     cb.PrintObs();
    @@ -142,77 +140,77 @@ 

    cb.PrintParams(); cb.SetVerbosity(1); cb.Verbosity(); -

    Python:

    cb.PrintAll()
    +

    Python:

    cb.PrintAll()
     cb.PrintObs()
     cb.PrintProcs()
     cb.PrintSysts()
     cb.PrintParams()
     cb.SetVerbosity(1)
     cb.Verbosity()
    -

    +

    Datacards

    Parsing specifying metadata

    C++:

    cb.ParseDatacard("datacard.txt", "htt", "8TeV", "mt", 6, "125");
    -

    Python:

    cb.ParseDatacard("datacard.txt", "htt", "8TeV", "mt", 6, "125")
    -

    Metadata parameters also have default values and can be named explicitly:

    cb.ParseDatacard("datacard.txt", analysis = "htt", mass = "125")
    -

    +

    Python:

    cb.ParseDatacard("datacard.txt", "htt", "8TeV", "mt", 6, "125")
    +

    Metadata parameters also have default values and can be named explicitly:

    cb.ParseDatacard("datacard.txt", analysis = "htt", mass = "125")
    +

    Parsing with pattern substitution

    C++:

    cb.ParseDatacard("htt_mt_8_8TeV.txt", "$ANALYSIS_$CHANNEL_$BINID_$ERA.txt");
    -

    Python (note the different method name):

    cb.QuickParseDatacard("htt_mt_8_8TeV.txt", "$ANALYSIS_$CHANNEL_$BINID_$ERA.txt")
    -

    +

    Python (note the different method name):

    cb.QuickParseDatacard("htt_mt_8_8TeV.txt", "$ANALYSIS_$CHANNEL_$BINID_$ERA.txt")
    +

    Writing

    C++:

    cb.WriteDatacard("card.txt", "file.root"); // or
     ...
     TFile out("file.root", "recreate");
     cb.WriteDatacard("card.txt", out);
    -

    Python (second method not yet available):

    cb.WriteDatacard("card.txt", "file.root")
    -

    +

    Python (second method not yet available):

    cb.WriteDatacard("card.txt", "file.root")
    +

    Filtering

    All of the basic filter methods can be called and chained in a similar way in both interfaces. For example:

    C++:

    cb.bin({"muTau_vbf"}).era({"7TeV", "8TeV"}).signals().process({"ggH"}, false);
    -

    Python:

    cb.bin(['muTau_vbf']).era(['7TeV', '8TeV']).signals().process(['ggH'], False)
    -

    The generic filter methods (FilterAll, FilterObs, FilterProcs, FilterSysts) have also been adapted to accept python functions, e.g.

    +

    Python:

    cb.bin(['muTau_vbf']).era(['7TeV', '8TeV']).signals().process(['ggH'], False)
    +

    The generic filter methods (FilterAll, FilterObs, FilterProcs, FilterSysts) have also been adapted to accept python functions, e.g.

    C++:

    cb.FilterAll([](ch::Object const* obj) {
       return obj->mass() == "110" || obj->mass() == "145";
       });
    -

    Python:

    cb.FilterAll(lambda obj : obj.mass() in ['110', '145'])
    -

    +

    Python:

    cb.FilterAll(lambda obj : obj.mass() in ['110', '145'])
    +

    Set producers

    All basic set producer methods are available.

    C++:

    set<string> bins = cb.bin_set();
     for (auto p : cb.process_set()) {
       ...
     }
    -

    Python:

    bins = cb.bin_set()
    +

    Python:

    bins = cb.bin_set()
     for p in cb.process_set():
         ...
    -

    The generic methods are available too, and accept a generic function object.

    +

    The generic methods are available too, and accept a generic function object.

    C++:

    set<string> bins = cb.SetFromAll(std::mem_fn(&ch::Object::bin));
     set<string> some_set = cb.SetFromProcs([](ch::Process const* p) {
             return p->process() + "_" + p->bin();
         });
    -

    Python:

    bins = cb.SetFromAll(ch.Object.bin)
    +

    Python:

    bins = cb.SetFromAll(ch.Object.bin)
     some_set = cb.SetFromProcs(lambda x : x.process() + '_' + x.bin())
    -

    +

    Modifications

    The GetParameter, and UpdateParameters methods that use ch::Parameter objects are not available (and may be deprecated soon anyway). The UpdateParameters method taking a RooFitResult is available however.

    C++:

    TFile f("mlfit.root");
     RooFitResult *res = (RooFitResult*)f.Get("fit_s");
     cb.UpdateParameters(*res);
    -

    Python:

    import ROOT as R
    +

    Python:

    import ROOT as R
     f = R.TFile("mlfit.root")
     res = f.Get("fit_s")
     cb.UpdateParameters(res)
    -

    The generic ForEach methods are also available and can take arbitrary python functions as input.

    +

    The generic ForEach methods are also available and can take arbitrary python functions as input.

    C++:

    void SwitchToSignal(ch::Process const* p) {
         if (p->process() == "ggH_hww125") p->set_signal(true);
     }
     cb.ForEachProc(SwitchToSignal);
    -

    Python:

    def SwitchToSignal(p):
    +

    Python:

    def SwitchToSignal(p):
         if p.process() == 'ggH_hww125': p.set_signal(True)
     cb.ForEachProc(SwitchToSignal)
    -

    +

    Rate and shape evaluation

    All methods are supported with a similar interface.

    C++:

    double a = cb.GetObservedRate();
    @@ -222,7 +220,7 @@ 

    TH1F e = cb.GetObservedShape(); TH1F f = cb.GetShape(); TH1F g = cb.GetShapeWithUncertainty(res, 500); -

    Python:

    import ROOT as R
    +

    Python:

    import ROOT as R
     a = cb.GetObservedRate()
     b = cb.GetRate()
     c = cb.GetUncertainty()
    @@ -230,7 +228,7 @@ 

    e = cb.GetObservedShape() f = cb.GetShape() g = cb.GetShapeWithUncertainty(res, 500) -

    +

    Datacard creation

    Creating observation and process entries is supported.

    C++:

    cb.AddObservations({"*"}, {"htt"}, {"8TeV"}, {"mt", "et"}, {{0, "0jet"}, {1, "1jet"}})
    @@ -239,12 +237,12 @@ 

    cb.AddProcesses(['*'], ['htt'], ['8TeV'], ['mt', 'et'], ['ZTT', 'ZL', 'ZJ'], [(0, "0jet"), (1, "1jet")], False) ## or with default values: cb.AddProcesses(procs = ['ZTT', 'ZL', ZJ'], bin = [(0, "0jet"), (1, "1jet")], signal=False) -

    As is bin-by-bin creating and merging, but note that these methods have been deprecated in favour of the standalone ch::BinByBinFactory class (see below).

    +

    As is bin-by-bin creating and merging, but note that these methods have been deprecated in favour of the standalone ch::BinByBinFactory class (see below).

    C++:

    cb.MergeBinErrors(0.1, 0.5);
     cb.AddBinByBin(0.1, true, cb);
    -

    Python:

    cb.MergeBinErrors(0.1, 0.5)
    +

    Python:

    cb.MergeBinErrors(0.1, 0.5)
     cb.AddBinByBin(0.1, True, cb)
    -

    The creation of Systematic entries with the AddSyst method is supported, though has a slightly different syntax due to the heavy template usage in the C++ version.

    +

    The creation of Systematic entries with the AddSyst method is supported, though has a slightly different syntax due to the heavy template usage in the C++ version.

    C++:

    cb.cp().process({"WH", "ZH"}).AddSyst(
       cb, "QCDscale_VH", "lnN", SystMap<channel, era, bin_id>::init
         ({"mt"}, {"7TeV", "8TeV"},  {1, 2},               1.010)
    @@ -252,31 +250,31 @@ 

    ({"et"}, {"7TeV"}, {1, 2, 3, 5, 6, 7}, 1.040) ({"et"}, {"8TeV"}, {1, 2}, 1.010) ({"et"}, {"8TeV"}, {3, 5, 6, 7}, 1.040)); -

    Python:

    cb.cp().process(['WH', 'ZH']).AddSyst(
    +

    Python:

    cb.cp().process(['WH', 'ZH']).AddSyst(
       cb, "QCDscale_VH", "lnN", ch.SystMap('channel', 'era', 'bin_id')
         (['mt'], ['7TeV', '8TeV'],  [1, 2],               1.010)
         (['mt'], ['7TeV', '8TeV'],  [3, 4, 5, 6, 7],      1.040)
         (['et'], ['7TeV'],          [1, 2, 3, 5, 6, 7],   1.040)
         (['et'], ['8TeV'],          [1, 2],               1.010)
         (['et'], ['8TeV'],          [3, 5, 6, 7],         1.040))
    -

    Note that asymmetric uncertainties are created in a different way in Python or C++:

    +

    Note that asymmetric uncertainties are created in a different way in Python or C++:

    C++:

    cb.cp().process({"WH", "ZH"}).AddSyst(
       cb, "QCDscale_VH", "lnN", SystMapAsymm<channel, era, bin_id>::init
         ({"mt"}, {"7TeV", "8TeV"}, {1, 2}, 0.91, 1.05));
    -

    Python:

    cb.cp().process(['WH', 'ZH']).AddSyst(
    +

    Python:

    cb.cp().process(['WH', 'ZH']).AddSyst(
       cb, "QCDscale_VH", "lnN", ch.SystMap('channel', 'era', 'bin_id')
         (['mt'], ['7TeV', '8TeV'], [1, 2], (0.91, 1.05)))
    -

    The ExtractPdfs, ExtractData and AddWorkspace methods are not currently supported.

    +

    The ExtractPdfs, ExtractData and AddWorkspace methods are not currently supported.

    Class: CardWriter

    The ch::CardWriter class has an identical interface in python.

    C++:

    ch::CardWriter writer("$TAG/$MASS/$ANALYSIS_$CHANNEL_$BINID_$ERA.txt",
                           "$TAG/common/$ANALYSIS_$CHANNEL.input_$ERA.root");
     writer.WriteCards("LIMITS/cmb", cb);
    -

    Python:

    writer = ch.CardWriter('$TAG/$MASS/$ANALYSIS_$CHANNEL_$BINID_$ERA.txt',
    +

    Python:

    writer = ch.CardWriter('$TAG/$MASS/$ANALYSIS_$CHANNEL_$BINID_$ERA.txt',
                            '$TAG/common/$ANALYSIS_$CHANNEL.input_$ERA.root')
     writer.WriteCards('LIMITS/cmb', cb)
    -

    +

    Class: BinByBinFactory

    The ch::BinByBinFactory class has an identical interface in python.

    C++:

    auto bbb = ch::BinByBinFactory()
    @@ -285,7 +283,7 @@ 

    .SetFixNorm(true); bbb.MergeBinErrors(cb.cp().backgrounds()); bbb.AddBinByBin(cb.cp().backgrounds(), cb); -

    Python:

    bbb = ch.BinByBinFactory()
    +

    Python:

    bbb = ch.BinByBinFactory()
     bbb.SetAddThreshold(0.1).SetMergeThreshold(0.5).SetFixNorm(True)
     bbb.MergeBinErrors(cb.cp().backgrounds())
     bbb.AddBinByBin(cb.cp().backgrounds(), cb)
    diff --git a/search/all_0.html b/search/all_0.html
    index a52d5f05353..1ec5b2d597f 100644
    --- a/search/all_0.html
    +++ b/search/all_0.html
    @@ -1,7 +1,8 @@
     
    -
    +
    +
     
    -
    +
     
     
     
    @@ -10,21 +11,27 @@
     
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_0.js b/search/all_0.js index 2517b082a1e..28e8791403a 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -1,37 +1,37 @@ var searchData= [ - ['addbinbybin_0',['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)']]], + ['addbinbybin_0',['AddBinByBin',['../classch_1_1_combine_harvester.html#aaf7c0e7a370d1a43290815e818058735',1,'ch::CombineHarvester::AddBinByBin(double threshold, bool fixed_norm, CombineHarvester &other)'],['../classch_1_1_combine_harvester.html#a20c5575a1983fbd8ff1b4232128610ff',1,'ch::CombineHarvester::AddBinByBin(double threshold, bool fixed_norm, CombineHarvester *other)'],['../classch_1_1_bin_by_bin_factory.html#ab097f067dce0a722af70dd86bf1b5398',1,'ch::BinByBinFactory::AddBinByBin()']]], ['adddatacardlineatend_1',['AddDatacardLineAtEnd',['../classch_1_1_combine_harvester.html#a59b5a637f7f11c2ee77a9b07bc1deb02',1,'ch::CombineHarvester']]], ['addextargvalue_2',['AddExtArgValue',['../classch_1_1_combine_harvester.html#ae94f5954e44697ce22d5516515c8627c',1,'ch::CombineHarvester']]], - ['addmssmsystematics_3',['AddMSSMSystematics',['../namespacech.html#aa94f943eeda46d951fd794b7532944ed',1,'ch::AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a597c0a29e463a96eb05f9df8cb9dfe90',1,'ch::AddMSSMSystematics(CombineHarvester &cb)']]], - ['addmssmupdatesystematics_5fem_4',['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_5',['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)']]], + ['addmssmsystematics_3',['AddMSSMSystematics',['../namespacech.html#a597c0a29e463a96eb05f9df8cb9dfe90',1,'ch::AddMSSMSystematics(CombineHarvester &cb)'],['../namespacech.html#aa94f943eeda46d951fd794b7532944ed',1,'ch::AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)']]], + ['addmssmupdatesystematics_5fem_4',['AddMSSMUpdateSystematics_em',['../namespacech.html#acec5cdd79f370c7bee88f4de418c9423',1,'ch::AddMSSMUpdateSystematics_em(CombineHarvester &cb)'],['../namespacech.html#ae6eebbd180b87701e7724c3db9d6cd5a',1,'ch::AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)']]], + ['addmssmupdatesystematics_5fet_5fmt_5',['AddMSSMUpdateSystematics_et_mt',['../namespacech.html#a2718097dd3af197ac2ad9d728b70ddde',1,'ch::AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb)'],['../namespacech.html#a0d7482a8b0989a1b6b7fe1689c65b0e1',1,'ch::AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb, CombineHarvester src)']]], ['addmssmupdatesystematics_5fmm_6',['AddMSSMUpdateSystematics_mm',['../namespacech.html#a2306f36ca615557c6e40a542eeac706c',1,'ch::AddMSSMUpdateSystematics_mm(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#af29ced9cc4bb7590f89223df727d1706',1,'ch::AddMSSMUpdateSystematics_mm(CombineHarvester &cb)']]], ['addmssmupdatesystematics_5ftt_7',['AddMSSMUpdateSystematics_tt',['../namespacech.html#acc4147799e297d63fa1a9ca08559a111',1,'ch::AddMSSMUpdateSystematics_tt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#aca0068af8fbaa611e502aa5647ed2121',1,'ch::AddMSSMUpdateSystematics_tt(CombineHarvester &cb)']]], ['addobservations_8',['AddObservations',['../classch_1_1_combine_harvester.html#a8d7ccde30bda35ec084f4e38b923ef23',1,'ch::CombineHarvester']]], ['addprocesses_9',['AddProcesses',['../classch_1_1_combine_harvester.html#a1ecb940a59ea7a2039956a07882e9ccc',1,'ch::CombineHarvester']]], ['addsyst_10',['AddSyst',['../classch_1_1_combine_harvester.html#aab26f47e06ee53fcf1aab5c0940e916f',1,'ch::CombineHarvester']]], - ['addsystematics_5fazh_11',['AddSystematics_AZh',['../namespacech.html#a7f9b08fd76f4940d92768574abe5df73',1,'ch::AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a7bf80bed7d84e3c82934fa939dc6e1e3',1,'ch::AddSystematics_AZh(CombineHarvester &cb)']]], + ['addsystematics_5fazh_11',['AddSystematics_AZh',['../namespacech.html#a7bf80bed7d84e3c82934fa939dc6e1e3',1,'ch::AddSystematics_AZh(CombineHarvester &cb)'],['../namespacech.html#a7f9b08fd76f4940d92768574abe5df73',1,'ch::AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)']]], ['addsystematics_5fee_5fmm_12',['AddSystematics_ee_mm',['../namespacech.html#a4d79c4fca0a76cc62c91d580644c051c',1,'ch']]], ['addsystematics_5fem_13',['AddSystematics_em',['../namespacech.html#afe8f3907b055d2d6c0bc8b2bb7f74a02',1,'ch']]], ['addsystematics_5fet_5fmt_14',['AddSystematics_et_mt',['../namespacech.html#aac947603f4cc50f70e7a8765da3e13d1',1,'ch']]], - ['addsystematics_5fhhh_5fet_5fmt_15',['AddSystematics_hhh_et_mt',['../namespacech.html#a5e05f5018289301287533bc288e576bb',1,'ch::AddSystematics_hhh_et_mt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#adab895bcbcec0006d4def02d2e909206',1,'ch::AddSystematics_hhh_et_mt(CombineHarvester &cb)']]], + ['addsystematics_5fhhh_5fet_5fmt_15',['AddSystematics_hhh_et_mt',['../namespacech.html#adab895bcbcec0006d4def02d2e909206',1,'ch::AddSystematics_hhh_et_mt(CombineHarvester &cb)'],['../namespacech.html#a5e05f5018289301287533bc288e576bb',1,'ch::AddSystematics_hhh_et_mt(CombineHarvester &cb, CombineHarvester src)']]], ['addsystematics_5fhhh_5ftt_16',['AddSystematics_hhh_tt',['../namespacech.html#ad7c22b70d392f9617ee6f1c27a622661',1,'ch::AddSystematics_hhh_tt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#add9281b32e8ff7ec2d8fd6de545b3b4f',1,'ch::AddSystematics_hhh_tt(CombineHarvester &cb)']]], ['addsystematics_5ftt_17',['AddSystematics_tt',['../namespacech.html#ac1578f3e0a1da427e6750ba4cefd94b8',1,'ch']]], ['addsystfromproc_18',['AddSystFromProc',['../classch_1_1_combine_harvester.html#a00bd4490f33ab0ae404fb46a8cbd9dfe',1,'ch::CombineHarvester']]], - ['addworkspace_19',['AddWorkspace',['../classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d',1,'ch::CombineHarvester']]], - ['algorithm_2eh_20',['Algorithm.h',['../_algorithm_8h.html',1,'']]], - ['all_5fattributes_21',['all_attributes',['../classch_1_1_object.html#af6956eda45da72f747aeee28fadfe4fe',1,'ch::Object']]], - ['analysis_22',['analysis',['../structch_1_1syst_1_1analysis.html',1,'ch::syst::analysis'],['../classch_1_1_combine_harvester.html#a672af065808c26e0795259876787c57f',1,'ch::CombineHarvester::analysis()'],['../classch_1_1_object.html#aa69ff36a99fa4cffbc908584b041a2c8',1,'ch::Object::analysis()']]], - ['analysis_5fset_23',['analysis_set',['../classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631',1,'ch::CombineHarvester']]], - ['any_5fof_24',['any_of',['../namespacech.html#a9ae81b01c3e51356f05c2734d4e7fd8d',1,'ch']]], - ['applygraphyoffset_25',['ApplyGraphYOffset',['../namespacepython_1_1plotting.html#adff090f8dc97c979fc8056e0844669c4',1,'python::plotting']]], - ['args_26',['Args',['../classch_1_1syst_1_1_syst_map.html#a452609011e0f85963821c7caf45f8b2b',1,'ch::syst::SystMap::Args()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a4c278563123e3a5f045dfb98cf33f8fc',1,'ch::syst::SystMapAsymm::Args()'],['../classch_1_1syst_1_1_syst_map_func.html#a04de0fc2c65b817a318d129e4f7615d4',1,'ch::syst::SystMapFunc::Args()']]], + ['addsystvar_19',['AddSystVar',['../classch_1_1_combine_harvester.html#a2dcd4e28456978a5b876ea76acb24c37',1,'ch::CombineHarvester']]], + ['addworkspace_20',['AddWorkspace',['../classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d',1,'ch::CombineHarvester']]], + ['algorithm_2eh_21',['Algorithm.h',['../_algorithm_8h.html',1,'']]], + ['all_5fattributes_22',['all_attributes',['../classch_1_1_object.html#af6956eda45da72f747aeee28fadfe4fe',1,'ch::Object']]], + ['analysis_23',['analysis',['../classch_1_1_object.html#aa69ff36a99fa4cffbc908584b041a2c8',1,'ch::Object::analysis()'],['../classch_1_1_combine_harvester.html#a672af065808c26e0795259876787c57f',1,'ch::CombineHarvester::analysis()'],['../structch_1_1syst_1_1analysis.html',1,'ch::syst::analysis']]], + ['analysis_5fset_24',['analysis_set',['../classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631',1,'ch::CombineHarvester']]], + ['any_5fof_25',['any_of',['../namespacech.html#a9ae81b01c3e51356f05c2734d4e7fd8d',1,'ch']]], + ['args_26',['Args',['../classch_1_1syst_1_1_syst_map_asymm.html#a4c278563123e3a5f045dfb98cf33f8fc',1,'ch::syst::SystMapAsymm::Args()'],['../classch_1_1syst_1_1_syst_map_func.html#a04de0fc2c65b817a318d129e4f7615d4',1,'ch::syst::SystMapFunc::Args()'],['../classch_1_1syst_1_1_syst_map.html#a452609011e0f85963821c7caf45f8b2b',1,'ch::syst::SystMap::Args()']]], ['asth1f_27',['AsTH1F',['../namespacech.html#af9b462e52384bf17acf24c57bee7a5d3',1,'ch']]], ['asymm_28',['asymm',['../classch_1_1_systematic.html#a5764d6db4954b8aac554776c149d3201',1,'ch::Systematic']]], ['attr_29',['attr',['../classch_1_1_combine_harvester.html#a634f83792bbce25a8ceed4621fbb6ca2',1,'ch::CombineHarvester']]], - ['attribute_30',['attribute',['../classch_1_1_object.html#a92bcd99a8c7a5e565d713387bbd954d2',1,'ch::Object']]], - ['autorebin_31',['AutoRebin',['../classch_1_1_auto_rebin.html',1,'ch::AutoRebin'],['../classch_1_1_auto_rebin.html#a9305a4b7d600e31a17ccc6606d488825',1,'ch::AutoRebin::AutoRebin()']]], + ['attribute_30',['attribute',['../classch_1_1_object.html#a3f131c3c63a86f91cab1d2fb56c86bb9',1,'ch::Object']]], + ['autorebin_31',['AutoRebin',['../classch_1_1_auto_rebin.html#a9305a4b7d600e31a17ccc6606d488825',1,'ch::AutoRebin::AutoRebin()'],['../classch_1_1_auto_rebin.html',1,'ch::AutoRebin']]], ['autorebin_2ecc_32',['AutoRebin.cc',['../_auto_rebin_8cc.html',1,'']]], ['autorebin_2eh_33',['AutoRebin.h',['../_auto_rebin_8h.html',1,'']]], ['azhsystematics_2ecc_34',['AZhSystematics.cc',['../_a_zh_systematics_8cc.html',1,'']]] diff --git a/search/all_1.html b/search/all_1.html index 0fcb70401f9..9f80e90431b 100644 --- a/search/all_1.html +++ b/search/all_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_1.js b/search/all_1.js index 21d19471513..c1e39b2ad5f 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -2,18 +2,18 @@ var searchData= [ ['b_35',['b',['../structch_1_1_s_over_b_info.html#a4b9f6bf1c14831274dd072306f69c5ef',1,'ch::SOverBInfo']]], ['backgrounds_36',['backgrounds',['../classch_1_1_combine_harvester.html#a1efc38e1377d77deaf5e9c4c8adbb250',1,'ch::CombineHarvester']]], - ['bestfit_37',['bestFit',['../_plotting___contours_8h.html#a674a5621e3faa0a1cd48155ca2cbbf48',1,'bestFit(): Plotting_Contours.h'],['../namespacepython_1_1plotting.html#adeba935104d42e1b1991046ddf8573e8',1,'python.plotting.bestFit()']]], - ['bin_38',['bin',['../structch_1_1syst_1_1bin.html',1,'ch::syst::bin'],['../classch_1_1_combine_harvester.html#a83dd50569a1f1a4b5a46f2ad2b5c1cdb',1,'ch::CombineHarvester::bin()'],['../classch_1_1_object.html#a7b588d78c22464ebe2b793cbaa2366d3',1,'ch::Object::bin()']]], - ['bin_5fid_39',['bin_id',['../classch_1_1syst_1_1bin__id.html',1,'ch::syst::bin_id'],['../classch_1_1_combine_harvester.html#a19106a6a89c84b90308b34672de6c187',1,'ch::CombineHarvester::bin_id()'],['../classch_1_1_object.html#a8f5df1a5ccf1f4053c67aaa98dec71e6',1,'ch::Object::bin_id()']]], + ['bestfit_37',['bestFit',['../_plotting___contours_8h.html#a674a5621e3faa0a1cd48155ca2cbbf48',1,'Plotting_Contours.h']]], + ['bin_38',['bin',['../classch_1_1_object.html#a7b588d78c22464ebe2b793cbaa2366d3',1,'ch::Object::bin()'],['../classch_1_1_combine_harvester.html#a83dd50569a1f1a4b5a46f2ad2b5c1cdb',1,'ch::CombineHarvester::bin()'],['../structch_1_1syst_1_1bin.html',1,'ch::syst::bin']]], + ['bin_5fid_39',['bin_id',['../classch_1_1_object.html#a8f5df1a5ccf1f4053c67aaa98dec71e6',1,'ch::Object::bin_id()'],['../classch_1_1_combine_harvester.html#a19106a6a89c84b90308b34672de6c187',1,'ch::CombineHarvester::bin_id()'],['../classch_1_1syst_1_1bin__id.html',1,'ch::syst::bin_id']]], ['bin_5fid_5fset_40',['bin_id_set',['../classch_1_1_combine_harvester.html#a51e79e40581a2f3602292cde9a858784',1,'ch::CombineHarvester']]], ['bin_5fset_41',['bin_set',['../classch_1_1_combine_harvester.html#a869c951c635b86fba33b2c550c9c39c9',1,'ch::CombineHarvester']]], ['binbybin_2ecc_42',['BinByBin.cc',['../_bin_by_bin_8cc.html',1,'']]], ['binbybin_2eh_43',['BinByBin.h',['../_bin_by_bin_8h.html',1,'']]], - ['binbybinfactory_44',['BinByBinFactory',['../classch_1_1_bin_by_bin_factory.html',1,'ch::BinByBinFactory'],['../classch_1_1_bin_by_bin_factory.html#ad83ac54b41f5ee9eabc33866bb61b834',1,'ch::BinByBinFactory::BinByBinFactory()']]], + ['binbybinfactory_44',['BinByBinFactory',['../classch_1_1_bin_by_bin_factory.html#ad83ac54b41f5ee9eabc33866bb61b834',1,'ch::BinByBinFactory::BinByBinFactory()'],['../classch_1_1_bin_by_bin_factory.html',1,'ch::BinByBinFactory']]], ['bkginfo_45',['BkgInfo',['../struct_bkg_info.html',1,'BkgInfo'],['../struct_bkg_info.html#a0ea51e03c4a8105333b7272e8532861c',1,'BkgInfo::BkgInfo()']]], - ['bsm_2dmodelindependent_2dlimits_2dhhhazh_2emd_46',['BSM-ModelIndependent-Limits-HhhAZh.md',['../_b_s_m-_model_independent-_limits-_hhh_a_zh_8md.html',1,'']]], - ['bsm_2dmodelindependent_2dlimits_2dmssmhtt_2emd_47',['BSM-ModelIndependent-Limits-MSSMHTT.md',['../_b_s_m-_model_independent-_limits-_m_s_s_m_h_t_t_8md.html',1,'']]], - ['buildroomorphing_48',['BuildRooMorphing',['../namespacech.html#a011bcc8eb52bfa118fd44ade245e9e45',1,'ch']]], - ['bsm_20model_20independent_20limits_20using_20morphinghhh_20or_20morphingazh_49',['BSM Model independent Limits using MorphingHhh or MorphingAZh',['../_model_indep_hhh_a_zh.html',1,'']]], - ['bsm_20model_20independent_20limits_20using_20morphingmssmupdate_50',['BSM Model independent Limits using MorphingMSSMUpdate',['../_m_s_s_m_update_no_model.html',1,'']]] + ['bsm_20model_20independent_20limits_20using_20morphinghhh_20or_20morphingazh_46',['BSM Model independent Limits using MorphingHhh or MorphingAZh',['../_model_indep_hhh_a_zh.html',1,'']]], + ['bsm_20model_20independent_20limits_20using_20morphingmssmupdate_47',['BSM Model independent Limits using MorphingMSSMUpdate',['../_m_s_s_m_update_no_model.html',1,'']]], + ['bsm_2dmodelindependent_2dlimits_2dhhhazh_2emd_48',['BSM-ModelIndependent-Limits-HhhAZh.md',['../_b_s_m-_model_independent-_limits-_hhh_a_zh_8md.html',1,'']]], + ['bsm_2dmodelindependent_2dlimits_2dmssmhtt_2emd_49',['BSM-ModelIndependent-Limits-MSSMHTT.md',['../_b_s_m-_model_independent-_limits-_m_s_s_m_h_t_t_8md.html',1,'']]], + ['buildroomorphing_50',['BuildRooMorphing',['../namespacech.html#a011bcc8eb52bfa118fd44ade245e9e45',1,'ch']]] ]; diff --git a/search/all_10.html b/search/all_10.html index c234738ec7e..3bf11961ff0 100644 --- a/search/all_10.html +++ b/search/all_10.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_10.js b/search/all_10.js index ecfc44f1bd7..27dafff64f4 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -1,108 +1,101 @@ var searchData= [ - ['s_360',['s',['../structch_1_1_s_over_b_info.html#aa596edaf3d5bcea0af28583b362a33c2',1,'ch::SOverBInfo']]], - ['scale_361',['scale',['../classch_1_1_systematic.html#ad8e5f3d29de730a563a1462ac964d5e5',1,'ch::Systematic']]], - ['set_362',['Set',['../namespacepython_1_1plotting.html#afa5ad39d3467939dbf1252650e62c0e8',1,'python::plotting']]], - ['set2vec_363',['Set2Vec',['../namespacech.html#a5e23234ab65cfa48c99b83d94e291125',1,'ch']]], - ['set_5fall_5fattributes_364',['set_all_attributes',['../classch_1_1_object.html#a8c779be0d578124a56a17031abd86c9f',1,'ch::Object']]], - ['set_5fanalysis_365',['set_analysis',['../classch_1_1_object.html#a1bae4062339f6b27251fa40eb3360120',1,'ch::Object']]], - ['set_5fasymm_366',['set_asymm',['../classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf',1,'ch::Systematic']]], - ['set_5fattribute_367',['set_attribute',['../classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b',1,'ch::Object']]], - ['set_5fbin_368',['set_bin',['../classch_1_1_object.html#a7997c967b45c8048e5d37284634192c8',1,'ch::Object']]], - ['set_5fbin_5fid_369',['set_bin_id',['../classch_1_1_object.html#af89246351b95fa11b2baa05b6d7ed191',1,'ch::Object']]], - ['set_5fchannel_370',['set_channel',['../classch_1_1_object.html#af7f8e3b47e518df640826bd2c6aac600',1,'ch::Object']]], - ['set_5fdata_371',['set_data',['../classch_1_1_observation.html#a8069a2cfb78c84325ba023064930bd43',1,'ch::Observation::set_data()'],['../classch_1_1_process.html#a97283db14e35e64eef1f0231c8cdd64c',1,'ch::Process::set_data()'],['../classch_1_1_systematic.html#a7488a889a863e7ae1395ff80320edbd8',1,'ch::Systematic::set_data()']]], - ['set_5fera_372',['set_era',['../classch_1_1_object.html#aeb86ec002c906c6845c7ae304435c1c7',1,'ch::Object']]], - ['set_5ferr_5fd_373',['set_err_d',['../classch_1_1_parameter.html#a2c1b75c9deb9a66a5065c6e67bb7eecf',1,'ch::Parameter']]], - ['set_5ferr_5fu_374',['set_err_u',['../classch_1_1_parameter.html#a29a0eec868eb1dd17e7443f0e154c35c',1,'ch::Parameter']]], - ['set_5ffrozen_375',['set_frozen',['../classch_1_1_parameter.html#a1539eec34291394e236f4dc6d7a43279',1,'ch::Parameter']]], - ['set_5fmass_376',['set_mass',['../classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3',1,'ch::Object']]], - ['set_5fname_377',['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_378',['set_norm',['../classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20',1,'ch::Process']]], - ['set_5fobservable_379',['set_observable',['../classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f',1,'ch::Process']]], - ['set_5fpdf_380',['set_pdf',['../classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae',1,'ch::Process::set_pdf()'],['../classch_1_1_systematic.html#a15b322bf20273a650dbdaa4316eb013c',1,'ch::Systematic::set_pdf()']]], - ['set_5fprocess_381',['set_process',['../classch_1_1_object.html#a3515d3c5453c0141c198718eb7b4bd03',1,'ch::Object']]], - ['set_5frange_382',['set_range',['../classch_1_1_parameter.html#a63f525de6f8c58439e852c0224ab2fec',1,'ch::Parameter']]], - ['set_5frange_5fd_383',['set_range_d',['../classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff',1,'ch::Parameter']]], - ['set_5frange_5fu_384',['set_range_u',['../classch_1_1_parameter.html#aac84fa2bc04bb36353fdb766d97bf89e',1,'ch::Parameter']]], - ['set_5frate_385',['set_rate',['../classch_1_1_observation.html#a08892e94877d2006921a9e3b3007eb3b',1,'ch::Observation::set_rate()'],['../classch_1_1_process.html#a178a4692175af3cb3f9699f424a03b30',1,'ch::Process::set_rate()']]], - ['set_5fscale_386',['set_scale',['../classch_1_1_systematic.html#ac02769c45caa0d41076ae1d92d5860ff',1,'ch::Systematic']]], - ['set_5fshape_387',['set_shape',['../classch_1_1_observation.html#a69698abc2c0a53c737e3e595d37f2b58',1,'ch::Observation::set_shape(std::unique_ptr< TH1 > shape, bool set_rate)'],['../classch_1_1_observation.html#ab61b8fc11b80ebd6136d3923a6d80300',1,'ch::Observation::set_shape(TH1 const &shape, bool set_rate)'],['../classch_1_1_process.html#a4f1a875514ceec5b7758112dc88b92ea',1,'ch::Process::set_shape(std::unique_ptr< TH1 > shape, bool set_rate)'],['../classch_1_1_process.html#a51ea6848ecb6b5030d96eff0b95ad99d',1,'ch::Process::set_shape(TH1 const &shape, bool set_rate)']]], - ['set_5fshapes_388',['set_shapes',['../classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d',1,'ch::Systematic::set_shapes(std::unique_ptr< TH1 > shape_u, std::unique_ptr< TH1 > shape_d, TH1 const *nominal)'],['../classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661',1,'ch::Systematic::set_shapes(TH1 const &shape_u, TH1 const &shape_d, TH1 const &nominal)']]], - ['set_5fsignal_389',['set_signal',['../classch_1_1_object.html#aef78a48151888bb0731a2e00cd0fa62c',1,'ch::Object']]], - ['set_5ftype_390',['set_type',['../classch_1_1_systematic.html#ad6299bae494e334e253e7486f7bff1d0',1,'ch::Systematic']]], - ['set_5fval_391',['set_val',['../classch_1_1_parameter.html#aae9193801a4ac8da13c7b873d87f2e3e',1,'ch::Parameter']]], - ['set_5fvalue_5fd_392',['set_value_d',['../classch_1_1_systematic.html#a40fb079acc7cdf7acd81d7bccb653f8a',1,'ch::Systematic']]], - ['set_5fvalue_5fu_393',['set_value_u',['../classch_1_1_systematic.html#a780d467fd100c4c521fc604ddcea6f0f',1,'ch::Systematic']]], - ['setaddthreshold_394',['SetAddThreshold',['../classch_1_1_bin_by_bin_factory.html#a022063406869d59a03e7aef47ce53e34',1,'ch::BinByBinFactory']]], - ['setautomcstats_395',['SetAutoMCStats',['../classch_1_1_combine_harvester.html#a8598c8d734f7461228d6e4d4a20ba33b',1,'ch::CombineHarvester']]], - ['setbinthreshold_396',['SetBinThreshold',['../classch_1_1_auto_rebin.html#aa08dc119e1c1f3296fbeb59732529338',1,'ch::AutoRebin']]], - ['setbinuncertfraction_397',['SetBinUncertFraction',['../classch_1_1_auto_rebin.html#ab156ebbbbbfc264c736d06f182da7c25',1,'ch::AutoRebin']]], - ['setbirdpalette_398',['SetBirdPalette',['../namespacepython_1_1plotting.html#af48f1beff13dca9995aca96ecac48f27',1,'python::plotting']]], - ['setcorrmatrixpalette_399',['SetCorrMatrixPalette',['../namespacepython_1_1plotting.html#aae4d4cf46e04b00b9a336be508218b17',1,'python::plotting']]], - ['setdeepseapalette_400',['SetDeepSeaPalette',['../namespacepython_1_1plotting.html#a7711053e47e60c813e7a3f0855ed6159',1,'python::plotting']]], - ['setfixnorm_401',['SetFixNorm',['../classch_1_1_bin_by_bin_factory.html#a05d997b69c619df3c2f7d20e4e7106b7',1,'ch::BinByBinFactory']]], - ['setflag_402',['SetFlag',['../classch_1_1_combine_harvester.html#a4b18f900247617db79a26ea0a08df15c',1,'ch::CombineHarvester']]], - ['setfromall_403',['SetFromAll',['../classch_1_1_combine_harvester.html#ac514e331fc81a67fc9d8de884b5666c3',1,'ch::CombineHarvester']]], - ['setfrombinname_404',['SetFromBinName',['../namespacech.html#af9aa1e238306d161656d15f0bf4fb8d4',1,'ch']]], - ['setfromobs_405',['SetFromObs',['../classch_1_1_combine_harvester.html#a455e0b19f8ff00c2b82d78baf59055a6',1,'ch::CombineHarvester']]], - ['setfromprocs_406',['SetFromProcs',['../classch_1_1_combine_harvester.html#a7a0c6913b055e11798269034ae324298',1,'ch::CombineHarvester']]], - ['setfromsysts_407',['SetFromSysts',['../classch_1_1_combine_harvester.html#a6c60a401231bfded23a56abe3f6dbf77',1,'ch::CombineHarvester']]], - ['setgroup_408',['SetGroup',['../classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5',1,'ch::CombineHarvester']]], - ['sethorizontalmorphingvariable_409',['SetHorizontalMorphingVariable',['../classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3',1,'ch::CMSHistFuncFactory']]], - ['setmergesaturatedbins_410',['SetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#a7240cc3c8d9be4d77e3e041256397e8f',1,'ch::BinByBinFactory']]], - ['setmergethreshold_411',['SetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#aa983d4e391adbf5a7af40458a3ffc062',1,'ch::BinByBinFactory']]], - ['setmergezerobins_412',['SetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#a57a7a111d2b683912cb70e5e9786432c',1,'ch::BinByBinFactory']]], - ['setmintozero_413',['SetMinToZero',['../namespacepython_1_1plotting.html#a522b5996aee3a56cab95f8a94c0d2009',1,'python::plotting']]], - ['setparinws_414',['setParInWs',['../classch_1_1_combine_harvester.html#af6906e10545d3958d0dd82472272e31e',1,'ch::CombineHarvester']]], - ['setpattern_415',['SetPattern',['../classch_1_1_bin_by_bin_factory.html#a4f8c2b763538030dcab6cd3566b27568',1,'ch::BinByBinFactory']]], - ['setpdfbins_416',['SetPdfBins',['../classch_1_1_combine_harvester.html#ad61cdbfaea0ed88c09651c2a92c934e2',1,'ch::CombineHarvester']]], - ['setperformrebin_417',['SetPerformRebin',['../classch_1_1_auto_rebin.html#a88bd0408dd758d31fe3f60815bbec5d3',1,'ch::AutoRebin']]], - ['setpoissonerrors_418',['SetPoissonErrors',['../classch_1_1_bin_by_bin_factory.html#a76d34782e2b31e762f07093e7d3748ab',1,'ch::BinByBinFactory']]], - ['setproperties_419',['SetProperties',['../namespacech.html#a0ea5d53cb275e53807f576a4020cf15e',1,'ch']]], - ['setrebinmode_420',['SetRebinMode',['../classch_1_1_auto_rebin.html#a5bac592f221a124caa199530c4a0d1d0',1,'ch::AutoRebin']]], - ['setstandardbinname_421',['SetStandardBinName',['../namespacech.html#a1a29f03f52660fd3a9fce0c353e3eee5',1,'ch']]], - ['setstandardbinnames_422',['SetStandardBinNames',['../namespacech.html#a99d1b22dfcd46bfde6a31a7a5765cd2b',1,'ch']]], - ['settdrstyle_423',['SetTDRStyle',['../_plotting___style_8h.html#a34d58d5193fe385ca42185433c16b69a',1,'SetTDRStyle(): Plotting_Style.h'],['../namespacepython_1_1plotting.html#a985823947a10fe741fd66736aff50b7e',1,'python.plotting.SetTDRStyle()']]], - ['setuptwopadsplitasratio_424',['SetupTwoPadSplitAsRatio',['../_plotting_8h.html#ac22871e6dbf88fd29fa06f8a2cfb5f8d',1,'SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TH1 *upper, TH1 *lower, TString y_title, bool y_centered, float y_min, float y_max): Plotting.h'],['../_plotting_8h.html#a293279a5520769bf993d81e4dc070709',1,'SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TString y_title, bool y_centered, float y_min, float y_max): Plotting.h'],['../namespacepython_1_1plotting.html#ac6210cfafae6f9dd8b7ec9d30f3b8275',1,'python.plotting.SetupTwoPadSplitAsRatio()']]], - ['setverbosity_425',['SetVerbosity',['../classch_1_1_auto_rebin.html#a934b5cdc81e812c6507ab33ddf6621d2',1,'ch::AutoRebin::SetVerbosity()'],['../classch_1_1_bin_by_bin_factory.html#a8ac5cd6b06c95b4bee7449dbde576067',1,'ch::BinByBinFactory::SetVerbosity()'],['../classch_1_1_card_writer.html#a55eae164745e2d1a4cc5a8a8cde36033',1,'ch::CardWriter::SetVerbosity()'],['../classch_1_1_combine_harvester.html#a00245515d95807d1d0c9501c5360ac01',1,'ch::CombineHarvester::SetVerbosity()']]], - ['setwildcardmasses_426',['SetWildcardMasses',['../classch_1_1_card_writer.html#a34ef01d0ec9b52687437e01db911f3c8',1,'ch::CardWriter']]], - ['shape_427',['shape',['../classch_1_1_observation.html#a38bcb70f9e4fe06bac1d5175247ad4e2',1,'ch::Observation::shape()'],['../classch_1_1_process.html#ad40cf460a5269fc12a96411ea8bad2f2',1,'ch::Process::shape()']]], - ['shape_5fd_428',['shape_d',['../classch_1_1_systematic.html#a5871a51570f061eed68fd8610f6041bc',1,'ch::Systematic']]], - ['shape_5fu_429',['shape_u',['../classch_1_1_systematic.html#a8341af1252e6db54ad999f3147bed794',1,'ch::Systematic']]], - ['shapeasth1f_430',['ShapeAsTH1F',['../classch_1_1_observation.html#a35828ac184b5aad339c5a0254f3b179e',1,'ch::Observation::ShapeAsTH1F()'],['../classch_1_1_process.html#a08ebc03f0519516a3e1b8f7aaa37d807',1,'ch::Process::ShapeAsTH1F()']]], - ['shapedasth1f_431',['ShapeDAsTH1F',['../classch_1_1_systematic.html#ad27b72a4bdb21f6ee93e490b98398eb3',1,'ch::Systematic']]], - ['shapeuasth1f_432',['ShapeUAsTH1F',['../classch_1_1_systematic.html#ac79c7195d56957d39a5329f856d20fe8',1,'ch::Systematic']]], - ['signal_433',['signal',['../classch_1_1_object.html#ae3d98ea3f4b25541efc26fa563ed1ed2',1,'ch::Object']]], - ['signals_434',['signals',['../classch_1_1_combine_harvester.html#a21c176f208a1603055113bd00e920d2d',1,'ch::CombineHarvester']]], - ['smlegacyexample_2ecpp_435',['SMLegacyExample.cpp',['../_s_m_legacy_example_8cpp.html',1,'']]], - ['sortgraph_436',['SortGraph',['../namespacepython_1_1plotting.html#aaecde5040c409a79db0a7cc3d5a5007f',1,'python::plotting']]], - ['soverbinfo_437',['SOverBInfo',['../structch_1_1_s_over_b_info.html',1,'ch::SOverBInfo'],['../structch_1_1_s_over_b_info.html#a4e552b096fd68bb3ebf2de40bc2cf9d1',1,'ch::SOverBInfo::SOverBInfo()'],['../structch_1_1_s_over_b_info.html#ac6c910ec7a9f9273987ef29a93d3ee96',1,'ch::SOverBInfo::SOverBInfo(TH1F const *sig, TH1F const *bkg, unsigned steps, double frac)']]], - ['soverbtools_2ecc_438',['SOverBTools.cc',['../_s_over_b_tools_8cc.html',1,'']]], - ['soverbtools_2eh_439',['SOverBTools.h',['../_s_over_b_tools_8h.html',1,'']]], - ['splitsyst_440',['SplitSyst',['../namespacech.html#a0f62630d67d75c1b6143c0519da2a720',1,'ch']]], - ['standardaxes_441',['StandardAxes',['../_plotting_8h.html#a976a4920cd03f97ded8454279c895a32',1,'StandardAxes(): Plotting.h'],['../namespacepython_1_1plotting.html#a0e1f1088e52d9a278b2e0dc1af4512ba',1,'python.plotting.StandardAxes(xaxis, yaxis, var, units, fmt='.1f')'],['../namespacepython_1_1plotting.html#a504cc85d525735f2042e0f72b6e04ef7',1,'python.plotting.StandardAxes(xaxis, yaxis, var, units)']]], - ['standardlimitsfromjsonfile_442',['StandardLimitsFromJSONFile',['../namespacepython_1_1plotting.html#a5d17f0ddd4eb0e15dc97958d25323f1c',1,'python::plotting']]], - ['starttimer_443',['StartTimer',['../classch_1_1_fn_timer.html#aa6368e35ad1520773275baf7ad1bbcb6',1,'ch::FnTimer']]], - ['stoptimer_444',['StopTimer',['../classch_1_1_fn_timer.html#a4dc02384a997b93294cd083b107a673e',1,'ch::FnTimer']]], - ['stylelimitband_445',['StyleLimitBand',['../namespacepython_1_1plotting.html#a156ac4a82a5eb80648008c9abadbd9c0',1,'python::plotting']]], - ['stylemultigraph_446',['styleMultiGraph',['../_plotting___contours_8h.html#ab5af5fc3993a46ace5fa84317653b4d3',1,'Plotting_Contours.h']]], - ['stylemultigraphmarker_447',['styleMultiGraphMarker',['../_plotting___contours_8h.html#a4261c9baca0c43812cbff936c0724109',1,'Plotting_Contours.h']]], - ['swap_448',['swap',['../classch_1_1_combine_harvester.html#a6b7c11550052d3edd98cd0971280ff79',1,'ch::CombineHarvester::swap()'],['../classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603',1,'ch::Object::swap()'],['../classch_1_1_observation.html#a89be1a9e99b14efd3d528195c3f8eb88',1,'ch::Observation::swap()'],['../classch_1_1_parameter.html#ab9f57f473beb19a385c769a104aee7cc',1,'ch::Parameter::swap()'],['../classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa',1,'ch::Process::swap()'],['../classch_1_1_systematic.html#ae72c57591746155a32cd36adc350e92a',1,'ch::Systematic::swap()'],['../namespacech.html#a98935d065d3339aebddc63328e2233ba',1,'ch::swap(CombineHarvester &first, CombineHarvester &second)'],['../namespacech.html#acfd60821a2deee24955d3a98e6605fd0',1,'ch::swap(Object &first, Object &second)'],['../namespacech.html#a53918f33e1cc50065abd25be2b64539a',1,'ch::swap(Observation &first, Observation &second)'],['../namespacech.html#a44b242b58441307bf5c7f0dbfbafe865',1,'ch::swap(Parameter &first, Parameter &second)'],['../namespacech.html#a8b80f6510601d33e773f90b1160d5463',1,'ch::swap(Process &first, Process &second)'],['../namespacech.html#a675f0b80d66b8a9b3948231c94a20fba',1,'ch::swap(Systematic &first, Systematic &second)']]], - ['swapupanddown_449',['SwapUpAndDown',['../classch_1_1_systematic.html#a838d5c14e2be2610010e7354eb706fae',1,'ch::Systematic']]], - ['sys_5fws_450',['sys_ws',['../structch_1_1_hist_mapping.html#addf039e15f8e0331e04e90f7d05b7122',1,'ch::HistMapping']]], - ['syst_5fname_451',['syst_name',['../classch_1_1_combine_harvester.html#a8a287dbad29d1c2c4963eef0e5d08ea9',1,'ch::CombineHarvester']]], - ['syst_5fname_5fset_452',['syst_name_set',['../classch_1_1_combine_harvester.html#ac3ef7424cb86d12fd294d9c6de98d533',1,'ch::CombineHarvester']]], - ['syst_5fpattern_453',['syst_pattern',['../structch_1_1_hist_mapping.html#ab8e25efafca82f1152d94819130157d2',1,'ch::HistMapping']]], - ['syst_5ftype_454',['syst_type',['../classch_1_1_combine_harvester.html#af13ff7dd8c281cd9e9cfd6b11fc05b95',1,'ch::CombineHarvester']]], - ['syst_5ftype_5fset_455',['syst_type_set',['../classch_1_1_combine_harvester.html#a6db7fd938efd2ce05454a72c4b6cbc78',1,'ch::CombineHarvester']]], - ['systematic_456',['Systematic',['../classch_1_1_systematic.html',1,'ch::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_457',['Systematic.cc',['../_systematic_8cc.html',1,'']]], - ['systematic_2eh_458',['Systematic.h',['../_systematic_8h.html',1,'']]], - ['systematics_2eh_459',['Systematics.h',['../_systematics_8h.html',1,'']]], - ['systmap_460',['SystMap',['../classch_1_1syst_1_1_syst_map.html',1,'ch::syst']]], - ['systmapasymm_461',['SystMapAsymm',['../classch_1_1syst_1_1_syst_map_asymm.html',1,'ch::syst']]], - ['systmapfunc_462',['SystMapFunc',['../classch_1_1syst_1_1_syst_map_func.html',1,'ch::syst']]], - ['systworkspacename_463',['SystWorkspaceName',['../structch_1_1_hist_mapping.html#a4fcefaafa55fe7973892bccd732e25b3',1,'ch::HistMapping']]], - ['systworkspaceobj_464',['SystWorkspaceObj',['../structch_1_1_hist_mapping.html#a0a2ddf13b993ee9059918ce288b93bd8',1,'ch::HistMapping']]] + ['s_329',['s',['../structch_1_1_s_over_b_info.html#aa596edaf3d5bcea0af28583b362a33c2',1,'ch::SOverBInfo']]], + ['scale_330',['scale',['../classch_1_1_systematic.html#ad8e5f3d29de730a563a1462ac964d5e5',1,'ch::Systematic']]], + ['set2vec_331',['Set2Vec',['../namespacech.html#a5e23234ab65cfa48c99b83d94e291125',1,'ch']]], + ['set_5fall_5fattributes_332',['set_all_attributes',['../classch_1_1_object.html#a8c779be0d578124a56a17031abd86c9f',1,'ch::Object']]], + ['set_5fanalysis_333',['set_analysis',['../classch_1_1_object.html#a1bae4062339f6b27251fa40eb3360120',1,'ch::Object']]], + ['set_5fasymm_334',['set_asymm',['../classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf',1,'ch::Systematic']]], + ['set_5fattribute_335',['set_attribute',['../classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b',1,'ch::Object']]], + ['set_5fbin_336',['set_bin',['../classch_1_1_object.html#a7997c967b45c8048e5d37284634192c8',1,'ch::Object']]], + ['set_5fbin_5fid_337',['set_bin_id',['../classch_1_1_object.html#af89246351b95fa11b2baa05b6d7ed191',1,'ch::Object']]], + ['set_5fchannel_338',['set_channel',['../classch_1_1_object.html#af7f8e3b47e518df640826bd2c6aac600',1,'ch::Object']]], + ['set_5fdata_339',['set_data',['../classch_1_1_process.html#a97283db14e35e64eef1f0231c8cdd64c',1,'ch::Process::set_data()'],['../classch_1_1_systematic.html#a7488a889a863e7ae1395ff80320edbd8',1,'ch::Systematic::set_data()'],['../classch_1_1_observation.html#a8069a2cfb78c84325ba023064930bd43',1,'ch::Observation::set_data()']]], + ['set_5fera_340',['set_era',['../classch_1_1_object.html#aeb86ec002c906c6845c7ae304435c1c7',1,'ch::Object']]], + ['set_5ferr_5fd_341',['set_err_d',['../classch_1_1_parameter.html#a2c1b75c9deb9a66a5065c6e67bb7eecf',1,'ch::Parameter']]], + ['set_5ferr_5fu_342',['set_err_u',['../classch_1_1_parameter.html#a29a0eec868eb1dd17e7443f0e154c35c',1,'ch::Parameter']]], + ['set_5ffrozen_343',['set_frozen',['../classch_1_1_parameter.html#a1539eec34291394e236f4dc6d7a43279',1,'ch::Parameter']]], + ['set_5fmass_344',['set_mass',['../classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3',1,'ch::Object']]], + ['set_5fname_345',['set_name',['../classch_1_1_systematic.html#a5b8ccb1b97744d1b4c2b9e5f410c4049',1,'ch::Systematic::set_name()'],['../classch_1_1_parameter.html#a4c19bef9dbf6821e18477da3286377c6',1,'ch::Parameter::set_name()']]], + ['set_5fnorm_346',['set_norm',['../classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20',1,'ch::Process']]], + ['set_5fobservable_347',['set_observable',['../classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f',1,'ch::Process']]], + ['set_5fparam_5fstr_5fext_348',['set_param_str_ext',['../classch_1_1_systematic.html#a0c0e9adce37196093c5bc303f78f4d08',1,'ch::Systematic']]], + ['set_5fpdf_349',['set_pdf',['../classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae',1,'ch::Process::set_pdf()'],['../classch_1_1_systematic.html#a15b322bf20273a650dbdaa4316eb013c',1,'ch::Systematic::set_pdf()']]], + ['set_5fprocess_350',['set_process',['../classch_1_1_object.html#a3515d3c5453c0141c198718eb7b4bd03',1,'ch::Object']]], + ['set_5frange_351',['set_range',['../classch_1_1_parameter.html#a63f525de6f8c58439e852c0224ab2fec',1,'ch::Parameter']]], + ['set_5frange_5fd_352',['set_range_d',['../classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff',1,'ch::Parameter']]], + ['set_5frange_5fu_353',['set_range_u',['../classch_1_1_parameter.html#aac84fa2bc04bb36353fdb766d97bf89e',1,'ch::Parameter']]], + ['set_5frate_354',['set_rate',['../classch_1_1_observation.html#a08892e94877d2006921a9e3b3007eb3b',1,'ch::Observation::set_rate()'],['../classch_1_1_process.html#a178a4692175af3cb3f9699f424a03b30',1,'ch::Process::set_rate()']]], + ['set_5fscale_355',['set_scale',['../classch_1_1_systematic.html#ac02769c45caa0d41076ae1d92d5860ff',1,'ch::Systematic']]], + ['set_5fshape_356',['set_shape',['../classch_1_1_observation.html#ab61b8fc11b80ebd6136d3923a6d80300',1,'ch::Observation::set_shape(TH1 const &shape, bool set_rate)'],['../classch_1_1_observation.html#a69698abc2c0a53c737e3e595d37f2b58',1,'ch::Observation::set_shape(std::unique_ptr< TH1 > shape, bool set_rate)'],['../classch_1_1_process.html#a51ea6848ecb6b5030d96eff0b95ad99d',1,'ch::Process::set_shape(TH1 const &shape, bool set_rate)'],['../classch_1_1_process.html#a4f1a875514ceec5b7758112dc88b92ea',1,'ch::Process::set_shape(std::unique_ptr< TH1 > shape, bool set_rate)']]], + ['set_5fshapes_357',['set_shapes',['../classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661',1,'ch::Systematic::set_shapes(TH1 const &shape_u, TH1 const &shape_d, TH1 const &nominal)'],['../classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d',1,'ch::Systematic::set_shapes(std::unique_ptr< TH1 > shape_u, std::unique_ptr< TH1 > shape_d, TH1 const *nominal)']]], + ['set_5fsignal_358',['set_signal',['../classch_1_1_object.html#aef78a48151888bb0731a2e00cd0fa62c',1,'ch::Object']]], + ['set_5ftype_359',['set_type',['../classch_1_1_systematic.html#ad6299bae494e334e253e7486f7bff1d0',1,'ch::Systematic']]], + ['set_5fval_360',['set_val',['../classch_1_1_parameter.html#aae9193801a4ac8da13c7b873d87f2e3e',1,'ch::Parameter']]], + ['set_5fvalue_5fd_361',['set_value_d',['../classch_1_1_systematic.html#a40fb079acc7cdf7acd81d7bccb653f8a',1,'ch::Systematic']]], + ['set_5fvalue_5fu_362',['set_value_u',['../classch_1_1_systematic.html#a780d467fd100c4c521fc604ddcea6f0f',1,'ch::Systematic']]], + ['setaddthreshold_363',['SetAddThreshold',['../classch_1_1_bin_by_bin_factory.html#a022063406869d59a03e7aef47ce53e34',1,'ch::BinByBinFactory']]], + ['setautomcstats_364',['SetAutoMCStats',['../classch_1_1_combine_harvester.html#a8598c8d734f7461228d6e4d4a20ba33b',1,'ch::CombineHarvester']]], + ['setbinthreshold_365',['SetBinThreshold',['../classch_1_1_auto_rebin.html#aa08dc119e1c1f3296fbeb59732529338',1,'ch::AutoRebin']]], + ['setbinuncertfraction_366',['SetBinUncertFraction',['../classch_1_1_auto_rebin.html#ab156ebbbbbfc264c736d06f182da7c25',1,'ch::AutoRebin']]], + ['setfixnorm_367',['SetFixNorm',['../classch_1_1_bin_by_bin_factory.html#a05d997b69c619df3c2f7d20e4e7106b7',1,'ch::BinByBinFactory']]], + ['setflag_368',['SetFlag',['../classch_1_1_combine_harvester.html#a4b18f900247617db79a26ea0a08df15c',1,'ch::CombineHarvester']]], + ['setfromall_369',['SetFromAll',['../classch_1_1_combine_harvester.html#ac514e331fc81a67fc9d8de884b5666c3',1,'ch::CombineHarvester']]], + ['setfrombinname_370',['SetFromBinName',['../namespacech.html#af9aa1e238306d161656d15f0bf4fb8d4',1,'ch']]], + ['setfromobs_371',['SetFromObs',['../classch_1_1_combine_harvester.html#a455e0b19f8ff00c2b82d78baf59055a6',1,'ch::CombineHarvester']]], + ['setfromprocs_372',['SetFromProcs',['../classch_1_1_combine_harvester.html#a7a0c6913b055e11798269034ae324298',1,'ch::CombineHarvester']]], + ['setfromsysts_373',['SetFromSysts',['../classch_1_1_combine_harvester.html#a6c60a401231bfded23a56abe3f6dbf77',1,'ch::CombineHarvester']]], + ['setgroup_374',['SetGroup',['../classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5',1,'ch::CombineHarvester']]], + ['sethorizontalmorphingvariable_375',['SetHorizontalMorphingVariable',['../classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3',1,'ch::CMSHistFuncFactory']]], + ['setmergesaturatedbins_376',['SetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#a7240cc3c8d9be4d77e3e041256397e8f',1,'ch::BinByBinFactory']]], + ['setmergethreshold_377',['SetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#aa983d4e391adbf5a7af40458a3ffc062',1,'ch::BinByBinFactory']]], + ['setmergezerobins_378',['SetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#a57a7a111d2b683912cb70e5e9786432c',1,'ch::BinByBinFactory']]], + ['setparinws_379',['setParInWs',['../classch_1_1_combine_harvester.html#af6906e10545d3958d0dd82472272e31e',1,'ch::CombineHarvester']]], + ['setpattern_380',['SetPattern',['../classch_1_1_bin_by_bin_factory.html#a4f8c2b763538030dcab6cd3566b27568',1,'ch::BinByBinFactory']]], + ['setpdfbins_381',['SetPdfBins',['../classch_1_1_combine_harvester.html#ad61cdbfaea0ed88c09651c2a92c934e2',1,'ch::CombineHarvester']]], + ['setperformrebin_382',['SetPerformRebin',['../classch_1_1_auto_rebin.html#a88bd0408dd758d31fe3f60815bbec5d3',1,'ch::AutoRebin']]], + ['setpoissonerrors_383',['SetPoissonErrors',['../classch_1_1_bin_by_bin_factory.html#a76d34782e2b31e762f07093e7d3748ab',1,'ch::BinByBinFactory']]], + ['setproperties_384',['SetProperties',['../namespacech.html#a0ea5d53cb275e53807f576a4020cf15e',1,'ch']]], + ['setrebinmode_385',['SetRebinMode',['../classch_1_1_auto_rebin.html#a5bac592f221a124caa199530c4a0d1d0',1,'ch::AutoRebin']]], + ['setstandardbinname_386',['SetStandardBinName',['../namespacech.html#a1a29f03f52660fd3a9fce0c353e3eee5',1,'ch']]], + ['setstandardbinnames_387',['SetStandardBinNames',['../namespacech.html#a99d1b22dfcd46bfde6a31a7a5765cd2b',1,'ch']]], + ['settdrstyle_388',['SetTDRStyle',['../_plotting___style_8h.html#a34d58d5193fe385ca42185433c16b69a',1,'Plotting_Style.h']]], + ['setuptwopadsplitasratio_389',['SetupTwoPadSplitAsRatio',['../_plotting_8h.html#a293279a5520769bf993d81e4dc070709',1,'SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TString y_title, bool y_centered, float y_min, float y_max): Plotting.h'],['../_plotting_8h.html#ac22871e6dbf88fd29fa06f8a2cfb5f8d',1,'SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TH1 *upper, TH1 *lower, TString y_title, bool y_centered, float y_min, float y_max): Plotting.h']]], + ['setverbosity_390',['SetVerbosity',['../classch_1_1_auto_rebin.html#a934b5cdc81e812c6507ab33ddf6621d2',1,'ch::AutoRebin::SetVerbosity()'],['../classch_1_1_bin_by_bin_factory.html#a8ac5cd6b06c95b4bee7449dbde576067',1,'ch::BinByBinFactory::SetVerbosity()'],['../classch_1_1_card_writer.html#a55eae164745e2d1a4cc5a8a8cde36033',1,'ch::CardWriter::SetVerbosity()'],['../classch_1_1_combine_harvester.html#a00245515d95807d1d0c9501c5360ac01',1,'ch::CombineHarvester::SetVerbosity()']]], + ['setwildcardmasses_391',['SetWildcardMasses',['../classch_1_1_card_writer.html#a34ef01d0ec9b52687437e01db911f3c8',1,'ch::CardWriter']]], + ['shape_392',['shape',['../classch_1_1_observation.html#a38bcb70f9e4fe06bac1d5175247ad4e2',1,'ch::Observation::shape()'],['../classch_1_1_process.html#ad40cf460a5269fc12a96411ea8bad2f2',1,'ch::Process::shape()']]], + ['shape_5fd_393',['shape_d',['../classch_1_1_systematic.html#a5871a51570f061eed68fd8610f6041bc',1,'ch::Systematic']]], + ['shape_5fu_394',['shape_u',['../classch_1_1_systematic.html#a8341af1252e6db54ad999f3147bed794',1,'ch::Systematic']]], + ['shapeasth1f_395',['ShapeAsTH1F',['../classch_1_1_observation.html#a35828ac184b5aad339c5a0254f3b179e',1,'ch::Observation::ShapeAsTH1F()'],['../classch_1_1_process.html#a08ebc03f0519516a3e1b8f7aaa37d807',1,'ch::Process::ShapeAsTH1F()']]], + ['shapedasth1f_396',['ShapeDAsTH1F',['../classch_1_1_systematic.html#ad27b72a4bdb21f6ee93e490b98398eb3',1,'ch::Systematic']]], + ['shapeuasth1f_397',['ShapeUAsTH1F',['../classch_1_1_systematic.html#ac79c7195d56957d39a5329f856d20fe8',1,'ch::Systematic']]], + ['signal_398',['signal',['../classch_1_1_object.html#ae3d98ea3f4b25541efc26fa563ed1ed2',1,'ch::Object']]], + ['signals_399',['signals',['../classch_1_1_combine_harvester.html#a21c176f208a1603055113bd00e920d2d',1,'ch::CombineHarvester']]], + ['smlegacyexample_2ecpp_400',['SMLegacyExample.cpp',['../_s_m_legacy_example_8cpp.html',1,'']]], + ['soverbinfo_401',['SOverBInfo',['../structch_1_1_s_over_b_info.html',1,'ch::SOverBInfo'],['../structch_1_1_s_over_b_info.html#a4e552b096fd68bb3ebf2de40bc2cf9d1',1,'ch::SOverBInfo::SOverBInfo()'],['../structch_1_1_s_over_b_info.html#ac6c910ec7a9f9273987ef29a93d3ee96',1,'ch::SOverBInfo::SOverBInfo(TH1F const *sig, TH1F const *bkg, unsigned steps, double frac)']]], + ['soverbtools_2ecc_402',['SOverBTools.cc',['../_s_over_b_tools_8cc.html',1,'']]], + ['soverbtools_2eh_403',['SOverBTools.h',['../_s_over_b_tools_8h.html',1,'']]], + ['splitsyst_404',['SplitSyst',['../namespacech.html#a0f62630d67d75c1b6143c0519da2a720',1,'ch']]], + ['standardaxes_405',['StandardAxes',['../_plotting_8h.html#a976a4920cd03f97ded8454279c895a32',1,'Plotting.h']]], + ['starttimer_406',['StartTimer',['../classch_1_1_fn_timer.html#aa6368e35ad1520773275baf7ad1bbcb6',1,'ch::FnTimer']]], + ['stoptimer_407',['StopTimer',['../classch_1_1_fn_timer.html#a4dc02384a997b93294cd083b107a673e',1,'ch::FnTimer']]], + ['stylemultigraph_408',['styleMultiGraph',['../_plotting___contours_8h.html#ab5af5fc3993a46ace5fa84317653b4d3',1,'Plotting_Contours.h']]], + ['stylemultigraphmarker_409',['styleMultiGraphMarker',['../_plotting___contours_8h.html#a4261c9baca0c43812cbff936c0724109',1,'Plotting_Contours.h']]], + ['swap_410',['swap',['../namespacech.html#a675f0b80d66b8a9b3948231c94a20fba',1,'ch::swap(Systematic &first, Systematic &second)'],['../namespacech.html#a8b80f6510601d33e773f90b1160d5463',1,'ch::swap(Process &first, Process &second)'],['../namespacech.html#a44b242b58441307bf5c7f0dbfbafe865',1,'ch::swap(Parameter &first, Parameter &second)'],['../namespacech.html#a53918f33e1cc50065abd25be2b64539a',1,'ch::swap(Observation &first, Observation &second)'],['../namespacech.html#acfd60821a2deee24955d3a98e6605fd0',1,'ch::swap(Object &first, Object &second)'],['../namespacech.html#a98935d065d3339aebddc63328e2233ba',1,'ch::swap(CombineHarvester &first, CombineHarvester &second)'],['../classch_1_1_combine_harvester.html#a6b7c11550052d3edd98cd0971280ff79',1,'ch::CombineHarvester::swap()'],['../classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603',1,'ch::Object::swap()'],['../classch_1_1_observation.html#a89be1a9e99b14efd3d528195c3f8eb88',1,'ch::Observation::swap()'],['../classch_1_1_parameter.html#ab9f57f473beb19a385c769a104aee7cc',1,'ch::Parameter::swap()'],['../classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa',1,'ch::Process::swap()'],['../classch_1_1_systematic.html#ae72c57591746155a32cd36adc350e92a',1,'ch::Systematic::swap()']]], + ['swapupanddown_411',['SwapUpAndDown',['../classch_1_1_systematic.html#a838d5c14e2be2610010e7354eb706fae',1,'ch::Systematic']]], + ['sys_5fws_412',['sys_ws',['../structch_1_1_hist_mapping.html#addf039e15f8e0331e04e90f7d05b7122',1,'ch::HistMapping']]], + ['syst_5fname_413',['syst_name',['../classch_1_1_combine_harvester.html#a8a287dbad29d1c2c4963eef0e5d08ea9',1,'ch::CombineHarvester']]], + ['syst_5fname_5fset_414',['syst_name_set',['../classch_1_1_combine_harvester.html#ac3ef7424cb86d12fd294d9c6de98d533',1,'ch::CombineHarvester']]], + ['syst_5fpattern_415',['syst_pattern',['../structch_1_1_hist_mapping.html#ab8e25efafca82f1152d94819130157d2',1,'ch::HistMapping']]], + ['syst_5ftype_416',['syst_type',['../classch_1_1_combine_harvester.html#af13ff7dd8c281cd9e9cfd6b11fc05b95',1,'ch::CombineHarvester']]], + ['syst_5ftype_5fset_417',['syst_type_set',['../classch_1_1_combine_harvester.html#a6db7fd938efd2ce05454a72c4b6cbc78',1,'ch::CombineHarvester']]], + ['systematic_418',['Systematic',['../classch_1_1_systematic.html',1,'ch::Systematic'],['../classch_1_1_systematic.html#abfaf59dd68bf8a9346fc5a9ce3bb745d',1,'ch::Systematic::Systematic(Systematic &&other)'],['../classch_1_1_systematic.html#a3a32c848411fbc9ff19899670a3c9bfb',1,'ch::Systematic::Systematic(Systematic const &other)'],['../classch_1_1_systematic.html#a4e1cc3aec9d8ad8e8a482a07dbbc4eff',1,'ch::Systematic::Systematic()']]], + ['systematic_2ecc_419',['Systematic.cc',['../_systematic_8cc.html',1,'']]], + ['systematic_2eh_420',['Systematic.h',['../_systematic_8h.html',1,'']]], + ['systematics_2eh_421',['Systematics.h',['../_systematics_8h.html',1,'']]], + ['systmap_422',['SystMap',['../classch_1_1syst_1_1_syst_map.html',1,'ch::syst']]], + ['systmapasymm_423',['SystMapAsymm',['../classch_1_1syst_1_1_syst_map_asymm.html',1,'ch::syst']]], + ['systmapfunc_424',['SystMapFunc',['../classch_1_1syst_1_1_syst_map_func.html',1,'ch::syst']]], + ['systworkspacename_425',['SystWorkspaceName',['../structch_1_1_hist_mapping.html#a4fcefaafa55fe7973892bccd732e25b3',1,'ch::HistMapping']]], + ['systworkspaceobj_426',['SystWorkspaceObj',['../structch_1_1_hist_mapping.html#a0a2ddf13b993ee9059918ce288b93bd8',1,'ch::HistMapping']]] ]; diff --git a/search/all_11.html b/search/all_11.html index 2f927fe5f03..c9f79d28960 100644 --- a/search/all_11.html +++ b/search/all_11.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_11.js b/search/all_11.js index 1b48478e881..5b2b0611189 100644 --- a/search/all_11.js +++ b/search/all_11.js @@ -1,25 +1,19 @@ var searchData= [ - ['tdrgrid_465',['TdrGrid',['../_plotting___style_8h.html#a0164a79c56b52dcd1963f0c015067238',1,'Plotting_Style.h']]], - ['tfileio_2ecc_466',['TFileIO.cc',['../_t_file_i_o_8cc.html',1,'']]], - ['tfileio_2eh_467',['TFileIO.h',['../_t_file_i_o_8h.html',1,'']]], - ['tfileisgood_468',['TFileIsGood',['../namespacepython_1_1plotting.html#a966f8767c6188136aa2e16967b776931',1,'python::plotting']]], - ['tgraph2dfromtree_469',['TGraph2DFromTree',['../_plotting_8h.html#afd3d99fcf4abb2cc459734f0d7ce44e6',1,'TGraph2DFromTree(): Plotting.h'],['../namespacepython_1_1plotting.html#a564405ccf77ddbeb4f873925fa514e70',1,'python.plotting.TGraph2DFromTree()']]], - ['tgraphfromtable_470',['TGraphFromTable',['../namespacech.html#a847fd9dc77ba21e35a6b531e1d26902a',1,'ch']]], - ['tgraphfromtree_471',['TGraphFromTree',['../_plotting_8h.html#a9359e5d70c59b3cd3ec03c4c7b449d1f',1,'TGraphFromTree(): Plotting.h'],['../namespacepython_1_1plotting.html#a39c399a361eec985033409a45e7e74b9',1,'python.plotting.TGraphFromTree()']]], - ['th1f2data_472',['TH1F2Data',['../namespacech.html#a1347e48be022e182e17dfc421bf12680',1,'ch']]], - ['th2fromtgraph2d_473',['TH2FromTGraph2D',['../namespacepython_1_1plotting.html#ac888e7dc2299e1562bb4e10d3e5e909a',1,'python::plotting']]], - ['threepadsplit_474',['ThreePadSplit',['../namespacepython_1_1plotting.html#ae5bed13c05b2ee4a3b3eb9ea966c7f23',1,'python::plotting']]], - ['to_5fstring_475',['to_string',['../classch_1_1_observation.html#a6fca2ff7fd0dada3c1254a54b81617c2',1,'ch::Observation::to_string()'],['../classch_1_1_process.html#a71a3c904169a01cb6e79d0c342643ad8',1,'ch::Process::to_string()'],['../classch_1_1_systematic.html#a8d1cceb924cb5709221afef970778236',1,'ch::Systematic::to_string()']]], - ['token_476',['Token',['../classch_1_1_fn_timer_1_1_token.html',1,'ch::FnTimer::Token'],['../classch_1_1_fn_timer_1_1_token.html#a1c853c1c56a90922270aeaa2727b1fab',1,'ch::FnTimer::Token::Token()']]], - ['toytgraphfromjson_477',['ToyTGraphFromJSON',['../namespacepython_1_1plotting.html#aaebc129aabfb0bceabb1759a251cf1c5',1,'python::plotting']]], - ['toytgraphfromjsonfile_478',['ToyTGraphFromJSONFile',['../namespacepython_1_1plotting.html#a9f3dc03b8c2f1b166a56c528e0713e8e',1,'python::plotting']]], - ['treetohist2d_479',['treeToHist2D',['../_plotting___contours_8h.html#aeb22bd9ab52fd5c4e6939a896eb971f7',1,'treeToHist2D(): Plotting_Contours.h'],['../namespacepython_1_1plotting.html#a0c281eca93efb5bae6b14237ca2c1c36',1,'python.plotting.treeToHist2D()']]], - ['tuple2string_480',['Tuple2String',['../namespacech.html#a8240c3e729fa2ebaaaf1082ce6a15dd5',1,'ch']]], - ['tupleprinter_481',['TuplePrinter',['../structch_1_1tupleprint_1_1_tuple_printer.html',1,'ch::tupleprint']]], - ['tupleprinter_3c_20tuple_2c_200_20_3e_482',['TuplePrinter< Tuple, 0 >',['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html',1,'ch::tupleprint']]], - ['tupleprinter_3c_20tuple_2c_201_20_3e_483',['TuplePrinter< Tuple, 1 >',['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html',1,'ch::tupleprint']]], - ['twopadsplit_484',['TwoPadSplit',['../_plotting_8h.html#aec780e8b3dd08b4a37dd94abc30f42c0',1,'TwoPadSplit(): Plotting.h'],['../namespacepython_1_1plotting.html#a42ec9d87c1a106fa4bb6707a6b490846',1,'python.plotting.TwoPadSplit()']]], - ['twopadsplitcolumns_485',['TwoPadSplitColumns',['../namespacepython_1_1plotting.html#a3e72f7cb7088669f044870a43cd191fc',1,'python::plotting']]], - ['type_486',['type',['../structch_1_1syst_1_1bin.html#a49d56f888416be832718d0ca180c0f5e',1,'ch::syst::bin::type()'],['../structch_1_1syst_1_1analysis.html#a11b01686f41ab63649080f7bc4aa9aaa',1,'ch::syst::analysis::type()'],['../structch_1_1syst_1_1era.html#a3efbe3d6162bf81819ebc883e6c6ffda',1,'ch::syst::era::type()'],['../structch_1_1syst_1_1channel.html#a7d239a5cff7e76f49e2b64b31346d094',1,'ch::syst::channel::type()'],['../structch_1_1syst_1_1mass.html#a0938bfa4855dfc837563804b4027de58',1,'ch::syst::mass::type()'],['../structch_1_1syst_1_1process.html#a92c10a4f56d6b72940dc816ef6421943',1,'ch::syst::process::type()'],['../classch_1_1syst_1_1bin__id.html#a6e658f07679ce2104ccd1944118dc734',1,'ch::syst::bin_id::type()'],['../classch_1_1_systematic.html#a2c91f65744afb7460bfffdf2a4987196',1,'ch::Systematic::type()']]] + ['tdrgrid_427',['TdrGrid',['../_plotting___style_8h.html#a0164a79c56b52dcd1963f0c015067238',1,'Plotting_Style.h']]], + ['tfileio_2ecc_428',['TFileIO.cc',['../_t_file_i_o_8cc.html',1,'']]], + ['tfileio_2eh_429',['TFileIO.h',['../_t_file_i_o_8h.html',1,'']]], + ['tgraph2dfromtree_430',['TGraph2DFromTree',['../_plotting_8h.html#afd3d99fcf4abb2cc459734f0d7ce44e6',1,'Plotting.h']]], + ['tgraphfromtable_431',['TGraphFromTable',['../namespacech.html#a847fd9dc77ba21e35a6b531e1d26902a',1,'ch']]], + ['tgraphfromtree_432',['TGraphFromTree',['../_plotting_8h.html#a9359e5d70c59b3cd3ec03c4c7b449d1f',1,'Plotting.h']]], + ['th1f2data_433',['TH1F2Data',['../namespacech.html#a1347e48be022e182e17dfc421bf12680',1,'ch']]], + ['to_5fstring_434',['to_string',['../classch_1_1_observation.html#a6fca2ff7fd0dada3c1254a54b81617c2',1,'ch::Observation::to_string()'],['../classch_1_1_process.html#a71a3c904169a01cb6e79d0c342643ad8',1,'ch::Process::to_string()'],['../classch_1_1_systematic.html#a8d1cceb924cb5709221afef970778236',1,'ch::Systematic::to_string()']]], + ['token_435',['Token',['../classch_1_1_fn_timer_1_1_token.html',1,'ch::FnTimer::Token'],['../classch_1_1_fn_timer_1_1_token.html#a1c853c1c56a90922270aeaa2727b1fab',1,'ch::FnTimer::Token::Token()']]], + ['treetohist2d_436',['treeToHist2D',['../_plotting___contours_8h.html#aeb22bd9ab52fd5c4e6939a896eb971f7',1,'Plotting_Contours.h']]], + ['tuple2string_437',['Tuple2String',['../namespacech.html#a8240c3e729fa2ebaaaf1082ce6a15dd5',1,'ch']]], + ['tupleprinter_438',['TuplePrinter',['../structch_1_1tupleprint_1_1_tuple_printer.html',1,'ch::tupleprint']]], + ['tupleprinter_3c_20tuple_2c_200_20_3e_439',['TuplePrinter< Tuple, 0 >',['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html',1,'ch::tupleprint']]], + ['tupleprinter_3c_20tuple_2c_201_20_3e_440',['TuplePrinter< Tuple, 1 >',['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html',1,'ch::tupleprint']]], + ['twopadsplit_441',['TwoPadSplit',['../_plotting_8h.html#aec780e8b3dd08b4a37dd94abc30f42c0',1,'Plotting.h']]], + ['type_442',['type',['../classch_1_1_systematic.html#a2c91f65744afb7460bfffdf2a4987196',1,'ch::Systematic::type()'],['../classch_1_1syst_1_1bin__id.html#a6e658f07679ce2104ccd1944118dc734',1,'ch::syst::bin_id::type()'],['../structch_1_1syst_1_1process.html#a92c10a4f56d6b72940dc816ef6421943',1,'ch::syst::process::type()'],['../structch_1_1syst_1_1mass.html#a0938bfa4855dfc837563804b4027de58',1,'ch::syst::mass::type()'],['../structch_1_1syst_1_1channel.html#a7d239a5cff7e76f49e2b64b31346d094',1,'ch::syst::channel::type()'],['../structch_1_1syst_1_1era.html#a3efbe3d6162bf81819ebc883e6c6ffda',1,'ch::syst::era::type()'],['../structch_1_1syst_1_1analysis.html#a11b01686f41ab63649080f7bc4aa9aaa',1,'ch::syst::analysis::type()'],['../structch_1_1syst_1_1bin.html#a49d56f888416be832718d0ca180c0f5e',1,'ch::syst::bin::type()']]] ]; diff --git a/search/all_12.html b/search/all_12.html index 6b0988c9246..ab934722c57 100644 --- a/search/all_12.html +++ b/search/all_12.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_12.js b/search/all_12.js index 4ff4a668dbd..a4018e3dc35 100644 --- a/search/all_12.js +++ b/search/all_12.js @@ -1,8 +1,8 @@ var searchData= [ - ['unitaxes_487',['UnitAxes',['../_plotting_8h.html#a434781fa740199ba94f267d8263cc1a2',1,'Plotting.h']]], - ['updatejson_488',['UpdateJson',['../namespacech.html#a53e0814284e64a6c0aa54c3a130c0a88',1,'ch']]], - ['updateparameters_489',['UpdateParameters',['../classch_1_1_combine_harvester.html#a85ec2d316143e79cf690da7ff217eadb',1,'ch::CombineHarvester::UpdateParameters(std::vector< ch::Parameter > const &params)'],['../classch_1_1_combine_harvester.html#a4ee38f7674ca075beda81b979ba6aac0',1,'ch::CombineHarvester::UpdateParameters(RooFitResult const *fit)'],['../classch_1_1_combine_harvester.html#a2f6fa74fbaa78ec7f73855dc3473a5f2',1,'ch::CombineHarvester::UpdateParameters(RooFitResult const &fit)']]], - ['utilities_2ecc_490',['Utilities.cc',['../_utilities_8cc.html',1,'']]], - ['utilities_2eh_491',['Utilities.h',['../_utilities_8h.html',1,'']]] + ['unitaxes_443',['UnitAxes',['../_plotting_8h.html#a434781fa740199ba94f267d8263cc1a2',1,'Plotting.h']]], + ['updatejson_444',['UpdateJson',['../namespacech.html#a53e0814284e64a6c0aa54c3a130c0a88',1,'ch']]], + ['updateparameters_445',['UpdateParameters',['../classch_1_1_combine_harvester.html#a85ec2d316143e79cf690da7ff217eadb',1,'ch::CombineHarvester::UpdateParameters(std::vector< ch::Parameter > const &params)'],['../classch_1_1_combine_harvester.html#a4ee38f7674ca075beda81b979ba6aac0',1,'ch::CombineHarvester::UpdateParameters(RooFitResult const *fit)'],['../classch_1_1_combine_harvester.html#a2f6fa74fbaa78ec7f73855dc3473a5f2',1,'ch::CombineHarvester::UpdateParameters(RooFitResult const &fit)']]], + ['utilities_2ecc_446',['Utilities.cc',['../_utilities_8cc.html',1,'']]], + ['utilities_2eh_447',['Utilities.h',['../_utilities_8h.html',1,'']]] ]; diff --git a/search/all_13.html b/search/all_13.html index 7e5f42a98b0..51172c2f3c2 100644 --- a/search/all_13.html +++ b/search/all_13.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_13.js b/search/all_13.js index 39ea5e29d0c..815bc42181f 100644 --- a/search/all_13.js +++ b/search/all_13.js @@ -1,18 +1,18 @@ var searchData= [ - ['val_492',['val',['../classch_1_1_parameter.html#ae395590d5d8f257af2068284462352ed',1,'ch::Parameter']]], - ['vald_493',['ValD',['../classch_1_1syst_1_1_syst_map.html#a3ac1f15dbce16900fe5812f2f7e44648',1,'ch::syst::SystMap::ValD()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a7799cc4fcf45999de8bad030b91be9f1',1,'ch::syst::SystMapAsymm::ValD()'],['../classch_1_1syst_1_1_syst_map_func.html#a43b53ef01e3c293030039e6bb2f960d4',1,'ch::syst::SystMapFunc::ValD()']]], - ['validatecards_494',['ValidateCards',['../namespacech.html#a879dedf45db74da348f2571492a280d2',1,'ch']]], - ['validateshapetemplates_495',['ValidateShapeTemplates',['../namespacech.html#a1734a00def15ba2ee51c28197176548e',1,'ch::ValidateShapeTemplates(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a110f24bc749763a04ea6c9fbd909fde8',1,'ch::ValidateShapeTemplates(CombineHarvester &cb)']]], - ['validateshapeuncertaintydirection_496',['ValidateShapeUncertaintyDirection',['../namespacech.html#a2e81a1feb11ba3255909526f90bbe7da',1,'ch::ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#aab5d6bfe23a9535399ea8ab48a3f223a',1,'ch::ValidateShapeUncertaintyDirection(CombineHarvester &cb)']]], - ['validationtools_2ecc_497',['ValidationTools.cc',['../_validation_tools_8cc.html',1,'']]], - ['validationtools_2eh_498',['ValidationTools.h',['../_validation_tools_8h.html',1,'']]], - ['validationtoolsnojson_2eh_499',['ValidationToolsNoJSON.h',['../_validation_tools_no_j_s_o_n_8h.html',1,'']]], - ['valsfromrange_500',['ValsFromRange',['../namespacech.html#aafb5cab1f237067be3553e893ca0a7b9',1,'ch']]], - ['valu_501',['ValU',['../classch_1_1syst_1_1_syst_map.html#a849dd4da93492c2afd51b31bd3a745f7',1,'ch::syst::SystMap::ValU()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ae4569458bdbdd7a21423e235e160683f',1,'ch::syst::SystMapAsymm::ValU()'],['../classch_1_1syst_1_1_syst_map_func.html#a2b1e2add77bcc6e0513965e4722d080e',1,'ch::syst::SystMapFunc::ValU()']]], - ['value_5fd_502',['value_d',['../classch_1_1_systematic.html#ac0438bd51a527d0b2c1a70dd303ff4c3',1,'ch::Systematic']]], - ['value_5fu_503',['value_u',['../classch_1_1_systematic.html#a1b40f502a9e5343cc1947bf452cd80d5',1,'ch::Systematic']]], - ['variablerebin_504',['VariableRebin',['../classch_1_1_combine_harvester.html#a9ec4406a5a327d11af6257be20865b2a',1,'ch::CombineHarvester']]], - ['vars_505',['vars',['../classch_1_1_parameter.html#a51f57bf4e727f2024da96a2ae2e5cf76',1,'ch::Parameter']]], - ['verbosity_506',['Verbosity',['../classch_1_1_combine_harvester.html#ac66fa8f787cb9e9d00435b8d5ef20aeb',1,'ch::CombineHarvester']]] + ['val_448',['val',['../classch_1_1_parameter.html#ae395590d5d8f257af2068284462352ed',1,'ch::Parameter']]], + ['vald_449',['ValD',['../classch_1_1syst_1_1_syst_map.html#a3ac1f15dbce16900fe5812f2f7e44648',1,'ch::syst::SystMap::ValD()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a7799cc4fcf45999de8bad030b91be9f1',1,'ch::syst::SystMapAsymm::ValD()'],['../classch_1_1syst_1_1_syst_map_func.html#a43b53ef01e3c293030039e6bb2f960d4',1,'ch::syst::SystMapFunc::ValD()']]], + ['validatecards_450',['ValidateCards',['../namespacech.html#a879dedf45db74da348f2571492a280d2',1,'ch']]], + ['validateshapetemplates_451',['ValidateShapeTemplates',['../namespacech.html#a110f24bc749763a04ea6c9fbd909fde8',1,'ch::ValidateShapeTemplates(CombineHarvester &cb)'],['../namespacech.html#a1734a00def15ba2ee51c28197176548e',1,'ch::ValidateShapeTemplates(CombineHarvester &cb, json &jsobj)']]], + ['validateshapeuncertaintydirection_452',['ValidateShapeUncertaintyDirection',['../namespacech.html#aab5d6bfe23a9535399ea8ab48a3f223a',1,'ch::ValidateShapeUncertaintyDirection(CombineHarvester &cb)'],['../namespacech.html#a2e81a1feb11ba3255909526f90bbe7da',1,'ch::ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)']]], + ['validationtools_2ecc_453',['ValidationTools.cc',['../_validation_tools_8cc.html',1,'']]], + ['validationtools_2eh_454',['ValidationTools.h',['../_validation_tools_8h.html',1,'']]], + ['validationtoolsnojson_2eh_455',['ValidationToolsNoJSON.h',['../_validation_tools_no_j_s_o_n_8h.html',1,'']]], + ['valsfromrange_456',['ValsFromRange',['../namespacech.html#aafb5cab1f237067be3553e893ca0a7b9',1,'ch']]], + ['valu_457',['ValU',['../classch_1_1syst_1_1_syst_map_func.html#a2b1e2add77bcc6e0513965e4722d080e',1,'ch::syst::SystMapFunc::ValU()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ae4569458bdbdd7a21423e235e160683f',1,'ch::syst::SystMapAsymm::ValU()'],['../classch_1_1syst_1_1_syst_map.html#a849dd4da93492c2afd51b31bd3a745f7',1,'ch::syst::SystMap::ValU()']]], + ['value_5fd_458',['value_d',['../classch_1_1_systematic.html#ac0438bd51a527d0b2c1a70dd303ff4c3',1,'ch::Systematic']]], + ['value_5fu_459',['value_u',['../classch_1_1_systematic.html#a1b40f502a9e5343cc1947bf452cd80d5',1,'ch::Systematic']]], + ['variablerebin_460',['VariableRebin',['../classch_1_1_combine_harvester.html#a9ec4406a5a327d11af6257be20865b2a',1,'ch::CombineHarvester']]], + ['vars_461',['vars',['../classch_1_1_parameter.html#a51f57bf4e727f2024da96a2ae2e5cf76',1,'ch::Parameter']]], + ['verbosity_462',['Verbosity',['../classch_1_1_combine_harvester.html#ac66fa8f787cb9e9d00435b8d5ef20aeb',1,'ch::CombineHarvester']]] ]; diff --git a/search/all_14.html b/search/all_14.html index ec7711ee85a..afecf563490 100644 --- a/search/all_14.html +++ b/search/all_14.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_14.js b/search/all_14.js index 1aec515de24..e94b190222b 100644 --- a/search/all_14.js +++ b/search/all_14.js @@ -1,9 +1,9 @@ var searchData= [ - ['workspacename_507',['WorkspaceName',['../structch_1_1_hist_mapping.html#af30077263ea939755c0f6c5e57acf452',1,'ch::HistMapping']]], - ['workspaceobj_508',['WorkspaceObj',['../structch_1_1_hist_mapping.html#a7805e6cd58e35394a0c867fa11a0b335',1,'ch::HistMapping']]], - ['writecards_509',['WriteCards',['../classch_1_1_card_writer.html#a4cc19951d42fb8721be76a5e26cbf0c6',1,'ch::CardWriter']]], - ['writedatacard_510',['WriteDatacard',['../classch_1_1_combine_harvester.html#a63255dd5ec491fa12857bc63b4174e92',1,'ch::CombineHarvester::WriteDatacard(std::string const &name, std::string const &root_file)'],['../classch_1_1_combine_harvester.html#a224d461aa1eec4a6cf2a3b915469d228',1,'ch::CombineHarvester::WriteDatacard(std::string const &name, TFile &root_file)'],['../classch_1_1_combine_harvester.html#a32e3454b8734a04374efef473b1db110',1,'ch::CombineHarvester::WriteDatacard(std::string const &name)']]], - ['writetotfile_511',['WriteToTFile',['../namespacech.html#a06e7ae02d1abed286e7184a7e7626529',1,'ch']]], - ['ws_512',['ws',['../structch_1_1_hist_mapping.html#ad83659fc57397fca2243f3ad26eb44a7',1,'ch::HistMapping']]] + ['workspacename_463',['WorkspaceName',['../structch_1_1_hist_mapping.html#af30077263ea939755c0f6c5e57acf452',1,'ch::HistMapping']]], + ['workspaceobj_464',['WorkspaceObj',['../structch_1_1_hist_mapping.html#a7805e6cd58e35394a0c867fa11a0b335',1,'ch::HistMapping']]], + ['writecards_465',['WriteCards',['../classch_1_1_card_writer.html#a4cc19951d42fb8721be76a5e26cbf0c6',1,'ch::CardWriter']]], + ['writedatacard_466',['WriteDatacard',['../classch_1_1_combine_harvester.html#a63255dd5ec491fa12857bc63b4174e92',1,'ch::CombineHarvester::WriteDatacard(std::string const &name, std::string const &root_file)'],['../classch_1_1_combine_harvester.html#a224d461aa1eec4a6cf2a3b915469d228',1,'ch::CombineHarvester::WriteDatacard(std::string const &name, TFile &root_file)'],['../classch_1_1_combine_harvester.html#a32e3454b8734a04374efef473b1db110',1,'ch::CombineHarvester::WriteDatacard(std::string const &name)']]], + ['writetotfile_467',['WriteToTFile',['../namespacech.html#a06e7ae02d1abed286e7184a7e7626529',1,'ch']]], + ['ws_468',['ws',['../structch_1_1_hist_mapping.html#ad83659fc57397fca2243f3ad26eb44a7',1,'ch::HistMapping']]] ]; diff --git a/search/all_15.html b/search/all_15.html index 2409e3c299d..69f382b31da 100644 --- a/search/all_15.html +++ b/search/all_15.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_15.js b/search/all_15.js index 46611c38f4b..db419dd6295 100644 --- a/search/all_15.js +++ b/search/all_15.js @@ -1,5 +1,5 @@ var searchData= [ - ['x_5fhi_513',['x_hi',['../structch_1_1_s_over_b_info.html#a0756a714ee23117ba20c261e9c03c924',1,'ch::SOverBInfo']]], - ['x_5flo_514',['x_lo',['../structch_1_1_s_over_b_info.html#ae94fc8af21cd3927f289993407ce417a',1,'ch::SOverBInfo']]] + ['x_5fhi_469',['x_hi',['../structch_1_1_s_over_b_info.html#a0756a714ee23117ba20c261e9c03c924',1,'ch::SOverBInfo']]], + ['x_5flo_470',['x_lo',['../structch_1_1_s_over_b_info.html#ae94fc8af21cd3927f289993407ce417a',1,'ch::SOverBInfo']]] ]; diff --git a/search/all_16.html b/search/all_16.html index 37b68745ea6..b19867ad9bc 100644 --- a/search/all_16.html +++ b/search/all_16.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_16.js b/search/all_16.js index 110fbe6fb17..0ee8d4e93a6 100644 --- a/search/all_16.js +++ b/search/all_16.js @@ -1,5 +1,5 @@ var searchData= [ - ['zerobins_515',['ZeroBins',['../classch_1_1_combine_harvester.html#a04ff1eb7d52a251110bef09b3f7be2c4',1,'ch::CombineHarvester']]], - ['zeronegativebins_516',['ZeroNegativeBins',['../namespacech.html#ad95e5447b9cb0676428f86b1fd018a97',1,'ch']]] + ['zerobins_471',['ZeroBins',['../classch_1_1_combine_harvester.html#a04ff1eb7d52a251110bef09b3f7be2c4',1,'ch::CombineHarvester']]], + ['zeronegativebins_472',['ZeroNegativeBins',['../namespacech.html#ad95e5447b9cb0676428f86b1fd018a97',1,'ch']]] ]; diff --git a/search/all_17.html b/search/all_17.html index c39d7506227..1ad5d34b4d1 100644 --- a/search/all_17.html +++ b/search/all_17.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_17.js b/search/all_17.js index c23dba614d5..7e44636ae51 100644 --- a/search/all_17.js +++ b/search/all_17.js @@ -1,11 +1,11 @@ var searchData= [ - ['_7ecombineharvester_517',['~CombineHarvester',['../classch_1_1_combine_harvester.html#a71a57cb6de8ede0b1e8ac51d73571a2a',1,'ch::CombineHarvester']]], - ['_7efntimer_518',['~FnTimer',['../classch_1_1_fn_timer.html#ad250e7cf97d91e1fe83d1d861a2fc7ab',1,'ch::FnTimer']]], - ['_7eobject_519',['~Object',['../classch_1_1_object.html#ae38bc7ac84c1624c0d8145fa67ea8d85',1,'ch::Object']]], - ['_7eobservation_520',['~Observation',['../classch_1_1_observation.html#abd0305355e2b59895fa3ee52bb89ec43',1,'ch::Observation']]], - ['_7eparameter_521',['~Parameter',['../classch_1_1_parameter.html#a23a0cca56da830a0bc521f5980de371c',1,'ch::Parameter']]], - ['_7eprocess_522',['~Process',['../classch_1_1_process.html#a23ead7f55f163bdb9cb9b1a3de30085d',1,'ch::Process']]], - ['_7esystematic_523',['~Systematic',['../classch_1_1_systematic.html#ad58316d4253223444aa64d0d67ef4af5',1,'ch::Systematic']]], - ['_7etoken_524',['~Token',['../classch_1_1_fn_timer_1_1_token.html#a8f09c19cbce557ae83281e8a0c36c8e9',1,'ch::FnTimer::Token']]] + ['_7ecombineharvester_473',['~CombineHarvester',['../classch_1_1_combine_harvester.html#a71a57cb6de8ede0b1e8ac51d73571a2a',1,'ch::CombineHarvester']]], + ['_7efntimer_474',['~FnTimer',['../classch_1_1_fn_timer.html#ad250e7cf97d91e1fe83d1d861a2fc7ab',1,'ch::FnTimer']]], + ['_7eobject_475',['~Object',['../classch_1_1_object.html#ae38bc7ac84c1624c0d8145fa67ea8d85',1,'ch::Object']]], + ['_7eobservation_476',['~Observation',['../classch_1_1_observation.html#abd0305355e2b59895fa3ee52bb89ec43',1,'ch::Observation']]], + ['_7eparameter_477',['~Parameter',['../classch_1_1_parameter.html#a23a0cca56da830a0bc521f5980de371c',1,'ch::Parameter']]], + ['_7eprocess_478',['~Process',['../classch_1_1_process.html#a23ead7f55f163bdb9cb9b1a3de30085d',1,'ch::Process']]], + ['_7esystematic_479',['~Systematic',['../classch_1_1_systematic.html#ad58316d4253223444aa64d0d67ef4af5',1,'ch::Systematic']]], + ['_7etoken_480',['~Token',['../classch_1_1_fn_timer_1_1_token.html#a8f09c19cbce557ae83281e8a0c36c8e9',1,'ch::FnTimer::Token']]] ]; diff --git a/search/all_2.html b/search/all_2.html index 19c530f2512..02cfffc2e13 100644 --- a/search/all_2.html +++ b/search/all_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_2.js b/search/all_2.js index 7b458a1f7f4..df661ab3e96 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -1,60 +1,60 @@ var searchData= [ - ['cardwriter_51',['CardWriter',['../classch_1_1_card_writer.html',1,'ch::CardWriter'],['../classch_1_1_card_writer.html#ac6b92918c967a8177add4d72bfa44e90',1,'ch::CardWriter::CardWriter()']]], - ['cardwriter_2ecc_52',['CardWriter.cc',['../_card_writer_8cc.html',1,'']]], - ['cardwriter_2eh_53',['CardWriter.h',['../_card_writer_8h.html',1,'']]], - ['categories_54',['Categories',['../namespacech.html#aa97b500b98aeaa86756eb1c5395a866e',1,'ch']]], - ['category_55',['category',['../structch_1_1_hist_mapping.html#a3f5bb3146facf941b757e6af4c0ac857',1,'ch::HistMapping']]], - ['cats_5fint_56',['cats_int',['../struct_col_info.html#ac7f91521ac9e960f88219cbf4e3d4bbc',1,'ColInfo']]], - ['cats_5fstr_57',['cats_str',['../struct_col_info.html#a093fee09d59006ef45bd76ff503e931e',1,'ColInfo']]], - ['ch_58',['ch',['../namespacech.html',1,'']]], - ['channel_59',['channel',['../structch_1_1syst_1_1channel.html',1,'ch::syst::channel'],['../classch_1_1_combine_harvester.html#af0aa39911df61ce140c97b13ffde77e9',1,'ch::CombineHarvester::channel()'],['../classch_1_1_object.html#af3647aa91e248e08fec6aabb7422af7f',1,'ch::Object::channel()']]], - ['channel_5fset_60',['channel_set',['../classch_1_1_combine_harvester.html#aa8d68c05c6be27db6568098a15f07e5c',1,'ch::CombineHarvester']]], - ['chargedhiggs_2emd_61',['ChargedHiggs.md',['../_charged_higgs_8md.html',1,'']]], - ['checkemptybins_62',['CheckEmptyBins',['../namespacech.html#a8a3f27453e5ff2a690defd0e9af30ba1',1,'ch::CheckEmptyBins(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a17c9ada5f6dff7d80556d45f6fc15711',1,'ch::CheckEmptyBins(CombineHarvester &cb)']]], - ['checkemptyshapes_63',['CheckEmptyShapes',['../namespacech.html#a8c2dcef8ee437178ff45671478c475c0',1,'ch::CheckEmptyShapes(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a7369fb27dd88881fe886abb67447cbc0',1,'ch::CheckEmptyShapes(CombineHarvester &cb)']]], - ['checknormeff_64',['CheckNormEff',['../namespacech.html#a36b4ff13e4987621615e47bd1c026993',1,'ch::CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)'],['../namespacech.html#aca65f362f9126cb2b200fff5356a9d59',1,'ch::CheckNormEff(CombineHarvester &cb, double maxNormEff)']]], - ['checksizeofshapeeffect_65',['CheckSizeOfShapeEffect',['../namespacech.html#a86955210d56802afd6080eda66bd4fa6',1,'ch::CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a3ea8e5201690fc0aca17b034fa3ba527',1,'ch::CheckSizeOfShapeEffect(CombineHarvester &cb)']]], - ['checksmallsignals_66',['CheckSmallSignals',['../namespacech.html#aa86c0751d41d0c533f51fe249468872a',1,'ch::CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)'],['../namespacech.html#a2fac772d6886087f8f4f77a711369ec9',1,'ch::CheckSmallSignals(CombineHarvester &cb, double minSigFrac)']]], - ['classes_2eh_67',['classes.h',['../_combine_tools_2src_2classes_8h.html',1,'(Global Namespace)'],['../_combine_pdfs_2src_2classes_8h.html',1,'(Global Namespace)']]], - ['cleardatacardlinesatend_68',['ClearDatacardLinesAtEnd',['../classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce',1,'ch::CombineHarvester']]], - ['clonedscaledshape_69',['ClonedScaledShape',['../classch_1_1_observation.html#a4ab5df5543cfe3ce7df385cb40e16d35',1,'ch::Observation::ClonedScaledShape()'],['../classch_1_1_process.html#a3818d45b542fe058e4159fe0a30d2fba',1,'ch::Process::ClonedScaledShape()']]], - ['clonedshape_70',['ClonedShape',['../classch_1_1_observation.html#a759deffcb06bd3e3bf06c1823e244144',1,'ch::Observation::ClonedShape()'],['../classch_1_1_process.html#af8d6574f338e05cdc4f4e647e9ae9d6c',1,'ch::Process::ClonedShape()']]], - ['clonedshaped_71',['ClonedShapeD',['../classch_1_1_systematic.html#a3b12feb2eceaa601c4b12e0922719d97',1,'ch::Systematic']]], - ['clonedshapeu_72',['ClonedShapeU',['../classch_1_1_systematic.html#a29c3a43b54fbf4a3e00975146e028251',1,'ch::Systematic']]], - ['cloneobs_73',['CloneObs',['../namespacech.html#a30449f890154e9002086dbfacc74d85c',1,'ch']]], - ['cloneprocs_74',['CloneProcs',['../namespacech.html#a25bd105268bf5e23e7c895329938aa0e',1,'ch']]], - ['cloneprocsandsysts_75',['CloneProcsAndSysts',['../namespacech.html#a27eee114b589ec9869ea3d34863e41fe',1,'ch']]], - ['clonesysts_76',['CloneSysts',['../namespacech.html#aa9eced43e8f467639564c24f2203f818',1,'ch']]], - ['cmshistfuncfactory_77',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html',1,'ch::CMSHistFuncFactory'],['../classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7',1,'ch::CMSHistFuncFactory::CMSHistFuncFactory()']]], - ['cmshistfuncfactory_2ecc_78',['CMSHistFuncFactory.cc',['../_c_m_s_hist_func_factory_8cc.html',1,'']]], - ['cmshistfuncfactory_2eh_79',['CMSHistFuncFactory.h',['../_c_m_s_hist_func_factory_8h.html',1,'']]], - ['col_5fstore_80',['COL_STORE',['../namespacepython_1_1plotting.html#a9dd11f8a47a545cac3a5e35ccac70075',1,'python::plotting']]], - ['colinfo_81',['ColInfo',['../struct_col_info.html',1,'']]], - ['combineharvester_82',['CombineHarvester',['../classch_1_1_combine_harvester.html',1,'ch::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)']]], - ['combineharvester_2ecc_83',['CombineHarvester.cc',['../_combine_harvester_8cc.html',1,'']]], - ['combineharvester_2eh_84',['CombineHarvester.h',['../_combine_harvester_8h.html',1,'']]], - ['combineharvester_5fcreation_2ecc_85',['CombineHarvester_Creation.cc',['../_combine_harvester___creation_8cc.html',1,'']]], - ['combineharvester_5fdatacards_2ecc_86',['CombineHarvester_Datacards.cc',['../_combine_harvester___datacards_8cc.html',1,'']]], - ['combineharvester_5fevaluate_2ecc_87',['CombineHarvester_Evaluate.cc',['../_combine_harvester___evaluate_8cc.html',1,'']]], - ['combineharvester_5ffilters_2ecc_88',['CombineHarvester_Filters.cc',['../_combine_harvester___filters_8cc.html',1,'']]], - ['contains_89',['Contains',['../classch_1_1syst_1_1_syst_map.html#a2e2a5300457329d7df0237702b533532',1,'ch::syst::SystMap::Contains()'],['../classch_1_1syst_1_1_syst_map_asymm.html#aa764f88f9da4813544264ea98d6b173d',1,'ch::syst::SystMapAsymm::Contains()'],['../classch_1_1syst_1_1_syst_map_func.html#a16c9205967690b0358db1ee501e3096b',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)']]], - ['contains_5frgx_90',['contains_rgx',['../namespacech.html#a7778c42ab19640ea360293c20bfa24f5',1,'ch']]], - ['contour2d_91',['contour2D',['../_plotting___contours_8h.html#a7181c71a4e6068cd9e7861d785fd1ecb',1,'Plotting_Contours.h']]], - ['contourfromth2_92',['contourFromTH2',['../_plotting___contours_8h.html#abaa7877c21f5ceb7376d212787ee3964',1,'contourFromTH2(): Plotting_Contours.h'],['../namespacepython_1_1plotting.html#af2b0eeb9509ca109461453598cd3aae8',1,'python.plotting.contourFromTH2()']]], - ['copytools_2ecc_93',['CopyTools.cc',['../_copy_tools_8cc.html',1,'']]], - ['copytools_2eh_94',['CopyTools.h',['../_copy_tools_8h.html',1,'']]], - ['cp_95',['cp',['../classch_1_1_combine_harvester.html#ade0f7c161d078a189404a274b93336d2',1,'ch::CombineHarvester']]], - ['createaxishist_96',['CreateAxisHist',['../_plotting_8h.html#ad137f606f878b7d25aeb2dde1b970ce9',1,'CreateAxisHist(TH1 *src, double xmin=0, double xmax=-1): Plotting.h'],['../_plotting_8h.html#ac4830bcc5449ac3275bf66ac389fe4ee',1,'CreateAxisHist(TGraph *src, bool at_limits): Plotting.h'],['../namespacepython_1_1plotting.html#ac86dc839c396ece76049116769cce181',1,'python.plotting.CreateAxisHist()']]], - ['createaxishists_97',['CreateAxisHists',['../_plotting_8h.html#aaeb0dadc50435965db936e967dde2799',1,'CreateAxisHists(unsigned n, TH1 *src, double xmin=0, double xmax=-1): Plotting.h'],['../_plotting_8h.html#a6c102d23f1264e7b30aed6f76ce6c740',1,'CreateAxisHists(unsigned n, TGraph *src, bool at_limits): Plotting.h'],['../namespacepython_1_1plotting.html#a06656a23374162431db40f47baea5f76',1,'python.plotting.CreateAxisHists()']]], - ['createdirectories_98',['CreateDirectories',['../classch_1_1_card_writer.html#a1c214a68a95a4d2f09dbe45a033cce16',1,'ch::CardWriter']]], - ['createparameterifempty_99',['CreateParameterIfEmpty',['../classch_1_1_combine_harvester.html#a2eefb78479b655130b6cf5710bdea33c',1,'ch::CombineHarvester']]], - ['createtransparentcolor_100',['CreateTransparentColor',['../_plotting_8h.html#addb5de4f8e6a8a5fa83d7d824d3d9934',1,'CreateTransparentColor(): Plotting.h'],['../namespacepython_1_1plotting.html#a62481c509fe69ac9d6d61aa69b17dc8e',1,'python.plotting.CreateTransparentColor()']]], - ['cross_101',['cross',['../namespacech_1_1syst_1_1detail.html#a67a602daf8c00931aea63667430d94a8',1,'ch::syst::detail']]], - ['cross_5fimp_102',['cross_imp',['../namespacech_1_1syst_1_1detail.html#a54c49b65dbe6b3a81b35285e8bf6e301',1,'ch::syst::detail::cross_imp(F f)'],['../namespacech_1_1syst_1_1detail.html#a3bf4d0fb6e19a9de3255b6741b5274d7',1,'ch::syst::detail::cross_imp(F f, std::vector< H > const &h, std::vector< Ts > const &... t)']]], - ['detail_103',['detail',['../namespacech_1_1syst_1_1detail.html',1,'ch::syst']]], - ['charged_20higgs_20datacards_20with_20roomorphingpdf_104',['Charged Higgs datacards with RooMorphingPdf',['../md_docs__charged_higgs.html',1,'']]], - ['calculating_20grids_20of_20cls_20values_20using_20toys_105',['Calculating grids of CLs values using toys',['../md_docs__hybrid_new_grid.html',1,'']]], + ['calculating_20grids_20of_20cls_20values_20using_20toys_51',['Calculating grids of CLs values using toys',['../md_docs__hybrid_new_grid.html',1,'']]], + ['cardwriter_52',['CardWriter',['../classch_1_1_card_writer.html#ac6b92918c967a8177add4d72bfa44e90',1,'ch::CardWriter::CardWriter()'],['../classch_1_1_card_writer.html',1,'ch::CardWriter']]], + ['cardwriter_2ecc_53',['CardWriter.cc',['../_card_writer_8cc.html',1,'']]], + ['cardwriter_2eh_54',['CardWriter.h',['../_card_writer_8h.html',1,'']]], + ['categories_55',['Categories',['../namespacech.html#aa97b500b98aeaa86756eb1c5395a866e',1,'ch']]], + ['category_56',['category',['../structch_1_1_hist_mapping.html#a3f5bb3146facf941b757e6af4c0ac857',1,'ch::HistMapping']]], + ['cats_5fint_57',['cats_int',['../struct_col_info.html#ac7f91521ac9e960f88219cbf4e3d4bbc',1,'ColInfo']]], + ['cats_5fstr_58',['cats_str',['../struct_col_info.html#a093fee09d59006ef45bd76ff503e931e',1,'ColInfo']]], + ['ch_59',['ch',['../namespacech.html',1,'']]], + ['channel_60',['channel',['../structch_1_1syst_1_1channel.html',1,'ch::syst::channel'],['../classch_1_1_object.html#af3647aa91e248e08fec6aabb7422af7f',1,'ch::Object::channel()'],['../classch_1_1_combine_harvester.html#af0aa39911df61ce140c97b13ffde77e9',1,'ch::CombineHarvester::channel(std::vector< std::string > const &vec, bool cond=true)']]], + ['channel_5fset_61',['channel_set',['../classch_1_1_combine_harvester.html#aa8d68c05c6be27db6568098a15f07e5c',1,'ch::CombineHarvester']]], + ['charged_20higgs_20datacards_20with_20roomorphingpdf_62',['Charged Higgs datacards with RooMorphingPdf',['../md_docs__charged_higgs.html',1,'']]], + ['chargedhiggs_2emd_63',['ChargedHiggs.md',['../_charged_higgs_8md.html',1,'']]], + ['checkemptybins_64',['CheckEmptyBins',['../namespacech.html#a8a3f27453e5ff2a690defd0e9af30ba1',1,'ch::CheckEmptyBins(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a17c9ada5f6dff7d80556d45f6fc15711',1,'ch::CheckEmptyBins(CombineHarvester &cb)']]], + ['checkemptyshapes_65',['CheckEmptyShapes',['../namespacech.html#a8c2dcef8ee437178ff45671478c475c0',1,'ch::CheckEmptyShapes(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a7369fb27dd88881fe886abb67447cbc0',1,'ch::CheckEmptyShapes(CombineHarvester &cb)']]], + ['checknormeff_66',['CheckNormEff',['../namespacech.html#aca65f362f9126cb2b200fff5356a9d59',1,'ch::CheckNormEff(CombineHarvester &cb, double maxNormEff)'],['../namespacech.html#a36b4ff13e4987621615e47bd1c026993',1,'ch::CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)']]], + ['checksizeofshapeeffect_67',['CheckSizeOfShapeEffect',['../namespacech.html#a86955210d56802afd6080eda66bd4fa6',1,'ch::CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a3ea8e5201690fc0aca17b034fa3ba527',1,'ch::CheckSizeOfShapeEffect(CombineHarvester &cb)']]], + ['checksmallsignals_68',['CheckSmallSignals',['../namespacech.html#a2fac772d6886087f8f4f77a711369ec9',1,'ch::CheckSmallSignals(CombineHarvester &cb, double minSigFrac)'],['../namespacech.html#aa86c0751d41d0c533f51fe249468872a',1,'ch::CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)']]], + ['classes_2eh_69',['classes.h',['../_combine_pdfs_2src_2classes_8h.html',1,'(Global Namespace)'],['../_combine_tools_2src_2classes_8h.html',1,'(Global Namespace)']]], + ['cleardatacardlinesatend_70',['ClearDatacardLinesAtEnd',['../classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce',1,'ch::CombineHarvester']]], + ['clonedscaledshape_71',['ClonedScaledShape',['../classch_1_1_observation.html#a4ab5df5543cfe3ce7df385cb40e16d35',1,'ch::Observation::ClonedScaledShape()'],['../classch_1_1_process.html#a3818d45b542fe058e4159fe0a30d2fba',1,'ch::Process::ClonedScaledShape()']]], + ['clonedshape_72',['ClonedShape',['../classch_1_1_observation.html#a759deffcb06bd3e3bf06c1823e244144',1,'ch::Observation::ClonedShape()'],['../classch_1_1_process.html#af8d6574f338e05cdc4f4e647e9ae9d6c',1,'ch::Process::ClonedShape()']]], + ['clonedshaped_73',['ClonedShapeD',['../classch_1_1_systematic.html#a3b12feb2eceaa601c4b12e0922719d97',1,'ch::Systematic']]], + ['clonedshapeu_74',['ClonedShapeU',['../classch_1_1_systematic.html#a29c3a43b54fbf4a3e00975146e028251',1,'ch::Systematic']]], + ['cloneobs_75',['CloneObs',['../namespacech.html#a30449f890154e9002086dbfacc74d85c',1,'ch']]], + ['cloneprocs_76',['CloneProcs',['../namespacech.html#a25bd105268bf5e23e7c895329938aa0e',1,'ch']]], + ['cloneprocsandsysts_77',['CloneProcsAndSysts',['../namespacech.html#a27eee114b589ec9869ea3d34863e41fe',1,'ch']]], + ['clonesysts_78',['CloneSysts',['../namespacech.html#aa9eced43e8f467639564c24f2203f818',1,'ch']]], + ['cmshistfuncfactory_79',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html',1,'ch::CMSHistFuncFactory'],['../classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7',1,'ch::CMSHistFuncFactory::CMSHistFuncFactory()']]], + ['cmshistfuncfactory_2ecc_80',['CMSHistFuncFactory.cc',['../_c_m_s_hist_func_factory_8cc.html',1,'']]], + ['cmshistfuncfactory_2eh_81',['CMSHistFuncFactory.h',['../_c_m_s_hist_func_factory_8h.html',1,'']]], + ['colinfo_82',['ColInfo',['../struct_col_info.html',1,'']]], + ['combineharvester_83',['CombineHarvester',['../classch_1_1_combine_harvester.html',1,'ch::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)']]], + ['combineharvester_2ecc_84',['CombineHarvester.cc',['../_combine_harvester_8cc.html',1,'']]], + ['combineharvester_2eh_85',['CombineHarvester.h',['../_combine_harvester_8h.html',1,'']]], + ['combineharvester_5fcreation_2ecc_86',['CombineHarvester_Creation.cc',['../_combine_harvester___creation_8cc.html',1,'']]], + ['combineharvester_5fdatacards_2ecc_87',['CombineHarvester_Datacards.cc',['../_combine_harvester___datacards_8cc.html',1,'']]], + ['combineharvester_5fevaluate_2ecc_88',['CombineHarvester_Evaluate.cc',['../_combine_harvester___evaluate_8cc.html',1,'']]], + ['combineharvester_5ffilters_2ecc_89',['CombineHarvester_Filters.cc',['../_combine_harvester___filters_8cc.html',1,'']]], + ['contains_90',['Contains',['../classch_1_1syst_1_1_syst_map_func.html#a16c9205967690b0358db1ee501e3096b',1,'ch::syst::SystMapFunc::Contains()'],['../classch_1_1syst_1_1_syst_map_asymm.html#aa764f88f9da4813544264ea98d6b173d',1,'ch::syst::SystMapAsymm::Contains()'],['../classch_1_1syst_1_1_syst_map.html#a2e2a5300457329d7df0237702b533532',1,'ch::syst::SystMap::Contains()']]], + ['contains_91',['contains',['../namespacech.html#a7d0976239046f20281fb0bd2bd2c3625',1,'ch::contains(const std::initializer_list< R > &r, T p)'],['../namespacech.html#a961ef6b98124198d1648868011bc0153',1,'ch::contains(const Range &r, T p)']]], + ['contains_5frgx_92',['contains_rgx',['../namespacech.html#a7778c42ab19640ea360293c20bfa24f5',1,'ch']]], + ['contour2d_93',['contour2D',['../_plotting___contours_8h.html#a7181c71a4e6068cd9e7861d785fd1ecb',1,'Plotting_Contours.h']]], + ['contourfromth2_94',['contourFromTH2',['../_plotting___contours_8h.html#abaa7877c21f5ceb7376d212787ee3964',1,'Plotting_Contours.h']]], + ['copytools_2ecc_95',['CopyTools.cc',['../_copy_tools_8cc.html',1,'']]], + ['copytools_2eh_96',['CopyTools.h',['../_copy_tools_8h.html',1,'']]], + ['cp_97',['cp',['../classch_1_1_combine_harvester.html#ade0f7c161d078a189404a274b93336d2',1,'ch::CombineHarvester']]], + ['createaxishist_98',['CreateAxisHist',['../_plotting_8h.html#ad137f606f878b7d25aeb2dde1b970ce9',1,'CreateAxisHist(TH1 *src, double xmin=0, double xmax=-1): Plotting.h'],['../_plotting_8h.html#ac4830bcc5449ac3275bf66ac389fe4ee',1,'CreateAxisHist(TGraph *src, bool at_limits): Plotting.h']]], + ['createaxishists_99',['CreateAxisHists',['../_plotting_8h.html#aaeb0dadc50435965db936e967dde2799',1,'CreateAxisHists(unsigned n, TH1 *src, double xmin=0, double xmax=-1): Plotting.h'],['../_plotting_8h.html#a6c102d23f1264e7b30aed6f76ce6c740',1,'CreateAxisHists(unsigned n, TGraph *src, bool at_limits): Plotting.h']]], + ['createdirectories_100',['CreateDirectories',['../classch_1_1_card_writer.html#a1c214a68a95a4d2f09dbe45a033cce16',1,'ch::CardWriter']]], + ['createparameterifempty_101',['CreateParameterIfEmpty',['../classch_1_1_combine_harvester.html#a2eefb78479b655130b6cf5710bdea33c',1,'ch::CombineHarvester']]], + ['createtransparentcolor_102',['CreateTransparentColor',['../_plotting_8h.html#addb5de4f8e6a8a5fa83d7d824d3d9934',1,'Plotting.h']]], + ['cross_103',['cross',['../namespacech_1_1syst_1_1detail.html#a67a602daf8c00931aea63667430d94a8',1,'ch::syst::detail']]], + ['cross_5fimp_104',['cross_imp',['../namespacech_1_1syst_1_1detail.html#a54c49b65dbe6b3a81b35285e8bf6e301',1,'ch::syst::detail::cross_imp(F f)'],['../namespacech_1_1syst_1_1detail.html#a3bf4d0fb6e19a9de3255b6741b5274d7',1,'ch::syst::detail::cross_imp(F f, std::vector< H > const &h, std::vector< Ts > const &... t)']]], + ['detail_105',['detail',['../namespacech_1_1syst_1_1detail.html',1,'ch::syst']]], ['syst_106',['syst',['../namespacech_1_1syst.html',1,'ch']]], ['tupleprint_107',['tupleprint',['../namespacech_1_1tupleprint.html',1,'ch']]] ]; diff --git a/search/all_3.html b/search/all_3.html index 1ae887fc624..39767b85baa 100644 --- a/search/all_3.html +++ b/search/all_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_3.js b/search/all_3.js index 83b671d4879..8219867db5f 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -6,11 +6,8 @@ var searchData= ['deep_111',['deep',['../classch_1_1_combine_harvester.html#acbc55586d0cc9e8dc83f0396157d4b75',1,'ch::CombineHarvester']]], ['delete_5fattribute_112',['delete_attribute',['../classch_1_1_object.html#afe324e1fe370f7804a30e84da0a67556',1,'ch::Object']]], ['deprecated_20list_113',['Deprecated List',['../deprecated.html',1,'']]], - ['drawcmslogo_114',['DrawCMSLogo',['../_plotting_8h.html#ac9a2d10dbb78251b4757aba40f73fa68',1,'DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX, float relPosX, float relPosY, float relExtraDY): Plotting.h'],['../_plotting_8h.html#a99344cc5028c90aaafacea9ec5eab9d2',1,'DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX): Plotting.h'],['../namespacepython_1_1plotting.html#a2f37093b1828f3553adf6c59e9a86aa4',1,'python.plotting.DrawCMSLogo()']]], + ['drawcmslogo_114',['DrawCMSLogo',['../_plotting_8h.html#ac9a2d10dbb78251b4757aba40f73fa68',1,'DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX, float relPosX, float relPosY, float relExtraDY): Plotting.h'],['../_plotting_8h.html#a99344cc5028c90aaafacea9ec5eab9d2',1,'DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX): Plotting.h']]], ['drawcontours_115',['drawContours',['../_plotting___contours_8h.html#afcb8faa65f5a499825189a7cdd745b9e',1,'Plotting_Contours.h']]], - ['drawhorizontalline_116',['DrawHorizontalLine',['../_plotting_8h.html#aa8adc566a12b3c090d1e1ff3330f7c98',1,'DrawHorizontalLine(): Plotting.h'],['../namespacepython_1_1plotting.html#aa59088e7ab459b7d23bbc043dc6be97a',1,'python.plotting.DrawHorizontalLine()']]], - ['drawlimitband_117',['DrawLimitBand',['../namespacepython_1_1plotting.html#a2c4bc7ae087717eb744bacdb14207e63',1,'python::plotting']]], - ['drawtitle_118',['DrawTitle',['../_plotting_8h.html#a39767958a52b4be5820816be7b1bb9bf',1,'DrawTitle(): Plotting.h'],['../namespacepython_1_1plotting.html#ae8b7215feda9add6dfa50619eb441857',1,'python.plotting.DrawTitle()']]], - ['drawverticalband_119',['DrawVerticalBand',['../namespacepython_1_1plotting.html#a1958833c592d44945a72957e87089cbf',1,'python::plotting']]], - ['drawverticalline_120',['DrawVerticalLine',['../namespacepython_1_1plotting.html#a42fdb746289c7f95685cbc0182f140e1',1,'python::plotting']]] + ['drawhorizontalline_116',['DrawHorizontalLine',['../_plotting_8h.html#aa8adc566a12b3c090d1e1ff3330f7c98',1,'Plotting.h']]], + ['drawtitle_117',['DrawTitle',['../_plotting_8h.html#a39767958a52b4be5820816be7b1bb9bf',1,'Plotting.h']]] ]; diff --git a/search/all_4.html b/search/all_4.html index 14c90ef5609..fc40463c89f 100644 --- a/search/all_4.html +++ b/search/all_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_4.js b/search/all_4.js index 11bda88c0d3..574602285a2 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,21 +1,21 @@ var searchData= [ - ['era_121',['era',['../structch_1_1syst_1_1era.html',1,'ch::syst::era'],['../struct_col_info.html#a218c046b7cd01eff65b5adcdb39169c5',1,'ColInfo::era()'],['../classch_1_1_combine_harvester.html#a4bb3afda2ccc54a1c259be6b715ae8e5',1,'ch::CombineHarvester::era()'],['../classch_1_1_object.html#ac45068d2a56b7142f30ee43c8bc3366b',1,'ch::Object::era()']]], - ['era_5fset_122',['era_set',['../classch_1_1_combine_harvester.html#a9f1ada299ed6d20f749cf10f589c25df',1,'ch::CombineHarvester']]], - ['erase_5fif_123',['erase_if',['../namespacech.html#a9e0d877cb39147fa1de5cdcb8eff2110',1,'ch']]], - ['err_5fd_124',['err_d',['../classch_1_1_parameter.html#a3ca540760eba83fa7867bf02315ba48d',1,'ch::Parameter']]], - ['err_5fu_125',['err_u',['../classch_1_1_parameter.html#a1cb6f7e522467a2090e4cc9fc86f5c25',1,'ch::Parameter']]], - ['example1_2emd_126',['Example1.md',['../_example1_8md.html',1,'']]], - ['example2_2emd_127',['Example2.md',['../_example2_8md.html',1,'']]], - ['example3_2emd_128',['Example3.md',['../_example3_8md.html',1,'']]], + ['era_118',['era',['../structch_1_1syst_1_1era.html',1,'ch::syst::era'],['../struct_col_info.html#a218c046b7cd01eff65b5adcdb39169c5',1,'ColInfo::era()'],['../classch_1_1_combine_harvester.html#a4bb3afda2ccc54a1c259be6b715ae8e5',1,'ch::CombineHarvester::era()'],['../classch_1_1_object.html#ac45068d2a56b7142f30ee43c8bc3366b',1,'ch::Object::era()']]], + ['era_5fset_119',['era_set',['../classch_1_1_combine_harvester.html#a9f1ada299ed6d20f749cf10f589c25df',1,'ch::CombineHarvester']]], + ['erase_5fif_120',['erase_if',['../namespacech.html#a9e0d877cb39147fa1de5cdcb8eff2110',1,'ch']]], + ['err_5fd_121',['err_d',['../classch_1_1_parameter.html#a3ca540760eba83fa7867bf02315ba48d',1,'ch::Parameter']]], + ['err_5fu_122',['err_u',['../classch_1_1_parameter.html#a1cb6f7e522467a2090e4cc9fc86f5c25',1,'ch::Parameter']]], + ['example1_2emd_123',['Example1.md',['../_example1_8md.html',1,'']]], + ['example2_2emd_124',['Example2.md',['../_example2_8md.html',1,'']]], + ['example3_2emd_125',['Example3.md',['../_example3_8md.html',1,'']]], + ['examples_20part_20i_126',['Examples Part I',['../intro1.html',1,'']]], + ['examples_20part_20ii_127',['Examples Part II',['../intro2.html',1,'']]], + ['examples_20part_20iii_128',['Examples Part III',['../intro3.html',1,'']]], ['extractdata_129',['ExtractData',['../classch_1_1_combine_harvester.html#ac40e961ea428fa6411ec8e3b6ddeadef',1,'ch::CombineHarvester']]], ['extractfitparameters_130',['ExtractFitParameters',['../namespacech.html#a49fb1eb0d277893e0f6a9cc099d4cf28',1,'ch']]], ['extractjsonfromfile_131',['ExtractJsonFromFile',['../namespacech.html#af6162c2c3534475d55453bbdb86b13a4',1,'ch']]], ['extractjsonfromstring_132',['ExtractJsonFromString',['../namespacech.html#a39e16e4393f4f945edfa540c3751cae8',1,'ch']]], ['extractpdfs_133',['ExtractPdfs',['../classch_1_1_combine_harvester.html#aff8e163ca0abe844603e676d142986a0',1,'ch::CombineHarvester']]], ['extractsampledfitparameters_134',['ExtractSampledFitParameters',['../namespacech.html#a9ba092c0c88fd0a122b927b83d91a4de',1,'ch']]], - ['extractshapes_135',['ExtractShapes',['../classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0',1,'ch::CombineHarvester']]], - ['examples_20part_20i_136',['Examples Part I',['../intro1.html',1,'']]], - ['examples_20part_20ii_137',['Examples Part II',['../intro2.html',1,'']]], - ['examples_20part_20iii_138',['Examples Part III',['../intro3.html',1,'']]] + ['extractshapes_135',['ExtractShapes',['../classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0',1,'ch::CombineHarvester']]] ]; diff --git a/search/all_5.html b/search/all_5.html index 60fa53e9eee..9dd9344b0d0 100644 --- a/search/all_5.html +++ b/search/all_5.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_5.js b/search/all_5.js index 5009e677c0c..ab9106a0a4a 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,32 +1,27 @@ var searchData= [ - ['fastfillth2_139',['fastFillTH2',['../namespacepython_1_1plotting.html#a59730ba620dbb43bb688ab10f2479757',1,'python::plotting']]], - ['file_140',['file',['../structch_1_1_hist_mapping.html#a3a7318d36a94d5902b6da6382051efd8',1,'ch::HistMapping']]], - ['fillinvertedth2_141',['fillInvertedTH2',['../namespacepython_1_1plotting.html#a51c8979fbd3c58c8ea17353e410a6718',1,'python::plotting']]], - ['fillth2_142',['fillTH2',['../namespacepython_1_1plotting.html#a39e68474eaae8c5c0529d96e25aa698d',1,'python::plotting']]], - ['filterall_143',['FilterAll',['../classch_1_1_combine_harvester.html#aab08f8aee1553b76501ff1a4de0a716c',1,'ch::CombineHarvester']]], - ['filtercontaining_144',['FilterContaining',['../namespacech.html#a66828130e239590bca8112c89d68b653',1,'ch::FilterContaining(Input &in, Filter const &filter, Converter fn, bool cond)'],['../namespacech.html#af86af10e2226a6deb97ad890c1ac9f0b',1,'ch::FilterContaining(Input &in, Filter const &filter, Converter fn, Funcarg arg, bool cond)']]], - ['filtercontainingrgx_145',['FilterContainingRgx',['../namespacech.html#a281b148e8871f50f2c3269ab91b1a837',1,'ch::FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)'],['../namespacech.html#ab0a522713ffa93da18cb26132f875344',1,'ch::FilterContainingRgx(Input &in, Filter const &filter, Converter fn, Funcarg arg, bool cond)']]], - ['filtergraph_146',['FilterGraph',['../namespacepython_1_1plotting.html#aee54f1dc361284346c88192e1a060aad',1,'python::plotting']]], - ['filterobs_147',['FilterObs',['../classch_1_1_combine_harvester.html#a35f86a79305555fec0a89b825d1fab71',1,'ch::CombineHarvester']]], - ['filterprocs_148',['FilterProcs',['../classch_1_1_combine_harvester.html#aab6a698c192aa091178bbd8dfbd0266f',1,'ch::CombineHarvester']]], - ['filtersysts_149',['FilterSysts',['../classch_1_1_combine_harvester.html#a91821b9464ebaacb5b92be2b3bc794f8',1,'ch::CombineHarvester']]], - ['findaddpdf_150',['FindAddPdf',['../namespacech.html#a5a4aae941cd175bf6764ad6789b4df8c',1,'ch']]], - ['findcrossingswithspline_151',['FindCrossingsWithSpline',['../namespacepython_1_1plotting.html#a295d9454418dea7b25a66b3b0e1cbb91',1,'python::plotting']]], - ['findnewbinning_152',['FindNewBinning',['../classch_1_1_auto_rebin.html#a2dc97baa47e812e6aa1817f604e2541a',1,'ch::AutoRebin']]], - ['fixbothranges_153',['FixBothRanges',['../namespacepython_1_1plotting.html#a3f697f7a987d5b37c585a4dd0b3674ea',1,'python::plotting']]], - ['fixboxpadding_154',['FixBoxPadding',['../_plotting_8h.html#a0d9c9cc36ba7c24dcdca74b6173a0335',1,'FixBoxPadding(): Plotting.h'],['../namespacepython_1_1plotting.html#a92d225e6a19a9705204d6137ed884e66',1,'python.plotting.FixBoxPadding()']]], - ['fixoverlay_155',['FixOverlay',['../_plotting_8h.html#a3ab873b129878269a347a387a5f6ff4b',1,'FixOverlay(): Plotting.h'],['../namespacepython_1_1plotting.html#aecb90c5d800c694865a52c8cbe023b63',1,'python.plotting.FixOverlay()']]], - ['fixtoprange_156',['FixTopRange',['../_plotting_8h.html#a5f529c55b51440415c95a200a9e0708f',1,'FixTopRange(): Plotting.h'],['../namespacepython_1_1plotting.html#a66b09224086d976e544a83b86c55df30',1,'python.plotting.FixTopRange()']]], - ['fnerror_157',['FnError',['../namespacech.html#afdabce9fcf0e565dcd93d273e771ef68',1,'ch::FnError()'],['../_logging_8h.html#ab140ae8826e1f99c5aa0e920a9c13112',1,'FNERROR(): Logging.h']]], - ['fnlog_158',['FNLOG',['../_logging_8h.html#ada13f286e68b5dcf51c75365e99c7a68',1,'Logging.h']]], - ['fnlogc_159',['FNLOGC',['../_logging_8h.html#a3eb848e20af411db5ba7f1d4f082fed0',1,'Logging.h']]], - ['fntimer_160',['FnTimer',['../classch_1_1_fn_timer.html',1,'ch::FnTimer'],['../classch_1_1_fn_timer.html#aa6e36b42f8bfa11abc0223da0ff485cc',1,'ch::FnTimer::FnTimer()']]], - ['foreachobj_161',['ForEachObj',['../classch_1_1_combine_harvester.html#adfa906384002e89b68fa1adcce4023ac',1,'ch::CombineHarvester']]], - ['foreachobs_162',['ForEachObs',['../classch_1_1_combine_harvester.html#a8f679f5e6e6cba2dd10f2d5eb14c4b20',1,'ch::CombineHarvester']]], - ['foreachproc_163',['ForEachProc',['../classch_1_1_combine_harvester.html#a44064524ffe47ccac63ef8025a6f46dc',1,'ch::CombineHarvester']]], - ['foreachsyst_164',['ForEachSyst',['../classch_1_1_combine_harvester.html#a3b73ec07ca4de14bf76383b2921f344a',1,'ch::CombineHarvester']]], - ['formula_165',['Formula',['../classch_1_1syst_1_1_syst_map.html#a4db58a5db937fe43cb8ac143df911557',1,'ch::syst::SystMap::Formula()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a754fb4eefc854fe7689d1d9ee43def0b',1,'ch::syst::SystMapAsymm::Formula()'],['../classch_1_1syst_1_1_syst_map_func.html#a23b0c78ec0a8e7c510e7b9cb35ab17ed',1,'ch::syst::SystMapFunc::Formula()']]], - ['frameth2d_166',['frameTH2D',['../_plotting___contours_8h.html#a6688b27766c40365cfaa5b632a99da97',1,'frameTH2D(): Plotting_Contours.h'],['../namespacepython_1_1plotting.html#ad901fa38f1b30a0c9a2bc3759a6030af',1,'python.plotting.frameTH2D()']]], - ['frozen_167',['frozen',['../classch_1_1_parameter.html#a1d3374ac1270ba79c38338d9bfbd006e',1,'ch::Parameter']]] + ['file_136',['file',['../structch_1_1_hist_mapping.html#a3a7318d36a94d5902b6da6382051efd8',1,'ch::HistMapping']]], + ['filterall_137',['FilterAll',['../classch_1_1_combine_harvester.html#aab08f8aee1553b76501ff1a4de0a716c',1,'ch::CombineHarvester']]], + ['filtercontaining_138',['FilterContaining',['../namespacech.html#af86af10e2226a6deb97ad890c1ac9f0b',1,'ch::FilterContaining(Input &in, Filter const &filter, Converter fn, Funcarg arg, bool cond)'],['../namespacech.html#a66828130e239590bca8112c89d68b653',1,'ch::FilterContaining(Input &in, Filter const &filter, Converter fn, bool cond)']]], + ['filtercontainingrgx_139',['FilterContainingRgx',['../namespacech.html#ab0a522713ffa93da18cb26132f875344',1,'ch::FilterContainingRgx(Input &in, Filter const &filter, Converter fn, Funcarg arg, bool cond)'],['../namespacech.html#a281b148e8871f50f2c3269ab91b1a837',1,'ch::FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)']]], + ['filterobs_140',['FilterObs',['../classch_1_1_combine_harvester.html#a35f86a79305555fec0a89b825d1fab71',1,'ch::CombineHarvester']]], + ['filterprocs_141',['FilterProcs',['../classch_1_1_combine_harvester.html#aab6a698c192aa091178bbd8dfbd0266f',1,'ch::CombineHarvester']]], + ['filtersysts_142',['FilterSysts',['../classch_1_1_combine_harvester.html#a91821b9464ebaacb5b92be2b3bc794f8',1,'ch::CombineHarvester']]], + ['findaddpdf_143',['FindAddPdf',['../namespacech.html#a5a4aae941cd175bf6764ad6789b4df8c',1,'ch']]], + ['findnewbinning_144',['FindNewBinning',['../classch_1_1_auto_rebin.html#a2dc97baa47e812e6aa1817f604e2541a',1,'ch::AutoRebin']]], + ['fixboxpadding_145',['FixBoxPadding',['../_plotting_8h.html#a0d9c9cc36ba7c24dcdca74b6173a0335',1,'Plotting.h']]], + ['fixoverlay_146',['FixOverlay',['../_plotting_8h.html#a3ab873b129878269a347a387a5f6ff4b',1,'Plotting.h']]], + ['fixtoprange_147',['FixTopRange',['../_plotting_8h.html#a5f529c55b51440415c95a200a9e0708f',1,'Plotting.h']]], + ['fnerror_148',['FnError',['../namespacech.html#afdabce9fcf0e565dcd93d273e771ef68',1,'ch']]], + ['fnerror_149',['FNERROR',['../_logging_8h.html#ab140ae8826e1f99c5aa0e920a9c13112',1,'Logging.h']]], + ['fnlog_150',['FNLOG',['../_logging_8h.html#ada13f286e68b5dcf51c75365e99c7a68',1,'Logging.h']]], + ['fnlogc_151',['FNLOGC',['../_logging_8h.html#a3eb848e20af411db5ba7f1d4f082fed0',1,'Logging.h']]], + ['fntimer_152',['FnTimer',['../classch_1_1_fn_timer.html',1,'ch::FnTimer'],['../classch_1_1_fn_timer.html#aa6e36b42f8bfa11abc0223da0ff485cc',1,'ch::FnTimer::FnTimer()']]], + ['foreachobj_153',['ForEachObj',['../classch_1_1_combine_harvester.html#adfa906384002e89b68fa1adcce4023ac',1,'ch::CombineHarvester']]], + ['foreachobs_154',['ForEachObs',['../classch_1_1_combine_harvester.html#a8f679f5e6e6cba2dd10f2d5eb14c4b20',1,'ch::CombineHarvester']]], + ['foreachproc_155',['ForEachProc',['../classch_1_1_combine_harvester.html#a44064524ffe47ccac63ef8025a6f46dc',1,'ch::CombineHarvester']]], + ['foreachsyst_156',['ForEachSyst',['../classch_1_1_combine_harvester.html#a3b73ec07ca4de14bf76383b2921f344a',1,'ch::CombineHarvester']]], + ['formula_157',['Formula',['../classch_1_1syst_1_1_syst_map_func.html#a23b0c78ec0a8e7c510e7b9cb35ab17ed',1,'ch::syst::SystMapFunc::Formula()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a754fb4eefc854fe7689d1d9ee43def0b',1,'ch::syst::SystMapAsymm::Formula()'],['../classch_1_1syst_1_1_syst_map.html#a4db58a5db937fe43cb8ac143df911557',1,'ch::syst::SystMap::Formula()']]], + ['frameth2d_158',['frameTH2D',['../_plotting___contours_8h.html#a6688b27766c40365cfaa5b632a99da97',1,'Plotting_Contours.h']]], + ['frozen_159',['frozen',['../classch_1_1_parameter.html#a1d3374ac1270ba79c38338d9bfbd006e',1,'ch::Parameter']]] ]; diff --git a/search/all_6.html b/search/all_6.html index 71803631376..f1e516d75ab 100644 --- a/search/all_6.html +++ b/search/all_6.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_6.js b/search/all_6.js index 56e37bec9e0..a9e244f1ac6 100644 --- a/search/all_6.js +++ b/search/all_6.js @@ -1,40 +1,35 @@ var searchData= [ - ['generatecombinations_168',['GenerateCombinations',['../namespacech.html#a98ec286981dda179332f736f113ab8a5',1,'ch']]], - ['get_169',['get',['../structch_1_1syst_1_1bin.html#ae566871b3c3496a373d94804fe078026',1,'ch::syst::bin::get()'],['../structch_1_1syst_1_1analysis.html#aef7aa22862630508c22b57ecd436e31c',1,'ch::syst::analysis::get()'],['../structch_1_1syst_1_1era.html#a0608c96c7f833d6375c16881c3aeaaf4',1,'ch::syst::era::get()'],['../structch_1_1syst_1_1channel.html#a72ea9574f99f03f955df62612a43c088',1,'ch::syst::channel::get()'],['../structch_1_1syst_1_1mass.html#a2f9dad5f252ac95b1628924fb7ad2b62',1,'ch::syst::mass::get()'],['../structch_1_1syst_1_1process.html#a02b9e1d72b3e3b9160f56859d6563227',1,'ch::syst::process::get()'],['../classch_1_1syst_1_1bin__id.html#a16e43240ce229d97f80b2e6728c3f1d9',1,'ch::syst::bin_id::get()'],['../namespacepython_1_1plotting.html#a150525eee69b8e2727690887a7bd4996',1,'python.plotting.Get()']]], - ['getaddthreshold_170',['GetAddThreshold',['../classch_1_1_bin_by_bin_factory.html#a466ad7528bd24e06dd48545a62695fc3',1,'ch::BinByBinFactory']]], - ['getautomcstatsbins_171',['GetAutoMCStatsBins',['../classch_1_1_combine_harvester.html#ab8656260b678698e1e86cc9a49397d19',1,'ch::CombineHarvester']]], - ['getaxishist_172',['GetAxisHist',['../_plotting_8h.html#aafd63f976dd4c5ae271062e0f91c2681',1,'GetAxisHist(): Plotting.h'],['../namespacepython_1_1plotting.html#a8730baf6077fb5e655003a7fdb93d8f5',1,'python.plotting.GetAxisHist()']]], - ['getclonedth1_173',['GetClonedTH1',['../namespacech.html#a9db822b84dd7cf9f1d3bc76a6a741498',1,'ch']]], - ['getfixnorm_174',['GetFixNorm',['../classch_1_1_bin_by_bin_factory.html#abfa5acf851e5bc60cb444ab99154fe0b',1,'ch::BinByBinFactory']]], - ['getflag_175',['GetFlag',['../classch_1_1_combine_harvester.html#a9af81a9db9eb21d656005a3dee30ad6e',1,'ch::CombineHarvester']]], - ['getmaximumfracuncertbin_176',['GetMaximumFracUncertBin',['../classch_1_1_auto_rebin.html#a72dbe98c7aacd48dd99d03d2b957a934',1,'ch::AutoRebin']]], - ['getmergesaturatedbins_177',['GetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#ac7a3cd16dbec7d10aefef145b56eb20d',1,'ch::BinByBinFactory']]], - ['getmergethreshold_178',['GetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#ad8d08a80d3b39a82b45cd47fb6ac1181',1,'ch::BinByBinFactory']]], - ['getmergezerobins_179',['GetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#ac086255693968d3f93a6599e4eb84a06',1,'ch::BinByBinFactory']]], - ['getobservedrate_180',['GetObservedRate',['../classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f',1,'ch::CombineHarvester']]], - ['getobservedshape_181',['GetObservedShape',['../classch_1_1_combine_harvester.html#a0d3eca727963c0c14a3c04bbdce2ca5e',1,'ch::CombineHarvester']]], - ['getoverlaymarkerandlegend_182',['getOverlayMarkerAndLegend',['../namespacepython_1_1plotting.html#ae40b4249dbf36e8a3815ee51853332d7',1,'python::plotting']]], - ['getpadymax_183',['GetPadYMax',['../_plotting_8h.html#a94fa210a8324e72a82327860972746eb',1,'GetPadYMax(TPad *pad, double x_min, double x_max): Plotting.h'],['../_plotting_8h.html#afa343295bd66905121be203cb7c7cc03',1,'GetPadYMax(TPad *pad): Plotting.h'],['../namespacepython_1_1plotting.html#a1adc45cdaed9e220983039a80fbe86cb',1,'python.plotting.GetPadYMax()']]], - ['getpadymaxinrange_184',['GetPadYMaxInRange',['../namespacepython_1_1plotting.html#ae99dbced2e99bc514bdfa5f57f51ba81',1,'python::plotting']]], - ['getpadymin_185',['GetPadYMin',['../namespacepython_1_1plotting.html#adc51ad4d5572e045e882a1cd12a22ce6',1,'python::plotting']]], - ['getparameter_186',['GetParameter',['../classch_1_1_combine_harvester.html#aea305007bd575b568a0e4cf92fdefb4c',1,'ch::CombineHarvester::GetParameter(std::string const &name) const'],['../classch_1_1_combine_harvester.html#ab994bb3d7ccc19475a28f5864831841e',1,'ch::CombineHarvester::GetParameter(std::string const &name)']]], - ['getparameters_187',['GetParameters',['../classch_1_1_combine_harvester.html#acf6fe66749432f6ab0efdf5955f08df8',1,'ch::CombineHarvester']]], - ['getparfromws_188',['getParFromWs',['../classch_1_1_combine_harvester.html#ad45a973f5947f9a1a09c8d588f778954',1,'ch::CombineHarvester']]], - ['getpattern_189',['GetPattern',['../classch_1_1_bin_by_bin_factory.html#a6807dbf5552c3dbdf96204c506e44143',1,'ch::BinByBinFactory']]], - ['getpoissonerrors_190',['GetPoissonErrors',['../classch_1_1_bin_by_bin_factory.html#a3039403328320d2f2b44fed582da6445',1,'ch::BinByBinFactory']]], - ['getqualififedname_191',['GetQualififedName',['../namespacech.html#a082a87dbfd5b9d61198f7fd4b68e70f9',1,'ch']]], - ['getrate_192',['GetRate',['../classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689',1,'ch::CombineHarvester']]], - ['getratecorrelation_193',['GetRateCorrelation',['../classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0',1,'ch::CombineHarvester']]], - ['getratecovariance_194',['GetRateCovariance',['../classch_1_1_combine_harvester.html#a01d2c826aba1891b7a1a5ce2dba395e4',1,'ch::CombineHarvester']]], - ['getshape_195',['GetShape',['../classch_1_1_combine_harvester.html#a3d265eb50ea8ec70192788d985733d9d',1,'ch::CombineHarvester']]], - ['getshapewithuncertainty_196',['GetShapeWithUncertainty',['../classch_1_1_combine_harvester.html#a749af47fa05e1e11b1488bfdb49efce5',1,'ch::CombineHarvester::GetShapeWithUncertainty()'],['../classch_1_1_combine_harvester.html#afeae4c75ae1a122fdcf0a7f28b15a9d8',1,'ch::CombineHarvester::GetShapeWithUncertainty(RooFitResult const *fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#a4601ceaf29711b11611545a3ee4a8fbb',1,'ch::CombineHarvester::GetShapeWithUncertainty(RooFitResult const &fit, unsigned n_samples)']]], - ['gettuple_197',['GetTuple',['../classch_1_1syst_1_1_syst_map.html#a164b50fafa77c9f471fca8abeec7aba2',1,'ch::syst::SystMap::GetTuple()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ad5ff5e296f946fa96f4b206fc64bae95',1,'ch::syst::SystMapAsymm::GetTuple()'],['../classch_1_1syst_1_1_syst_map_func.html#a7af1c3f39dacbbf5df37da61185a9f55',1,'ch::syst::SystMapFunc::GetTuple()']]], - ['gettupleset_198',['GetTupleSet',['../classch_1_1syst_1_1_syst_map.html#a11bb44a14b6ca6d3da7a9d3a83ca00f0',1,'ch::syst::SystMap::GetTupleSet()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ac65e511162716bff85d69ac6b2a9b9cd',1,'ch::syst::SystMapAsymm::GetTupleSet()'],['../classch_1_1syst_1_1_syst_map_func.html#a9942c61e232bc13fb72c2cdc68ae56eb',1,'ch::syst::SystMapFunc::GetTupleSet()']]], - ['getuncertainty_199',['GetUncertainty',['../classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5',1,'ch::CombineHarvester::GetUncertainty()'],['../classch_1_1_combine_harvester.html#af71f64a1d858700bd16d98cee1c10c26',1,'ch::CombineHarvester::GetUncertainty(RooFitResult const *fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#aa7c0646bfab0a974c72fe815e33c5a32',1,'ch::CombineHarvester::GetUncertainty(RooFitResult const &fit, unsigned n_samples)']]], - ['getverbosity_200',['GetVerbosity',['../classch_1_1_bin_by_bin_factory.html#a0287bddb9ddd5ce6a2c00e8e2d092553',1,'ch::BinByBinFactory']]], - ['graphdifference_201',['GraphDifference',['../namespacepython_1_1plotting.html#a0f8d9d2d1e51e599d676fc0758083bf2',1,'python::plotting']]], - ['graphdivide_202',['GraphDivide',['../namespacepython_1_1plotting.html#aff48ab1136cac75e4af3b66cc055f030',1,'python::plotting']]], - ['graphfromspline_203',['GraphFromSpline',['../namespacech.html#aefdcaba918224f404af9fcd9b53fa7bb',1,'ch']]], - ['groups_204',['groups',['../classch_1_1_parameter.html#a241d3b9acedcf0c2de4d44646e288019',1,'ch::Parameter']]] + ['generatecombinations_160',['GenerateCombinations',['../namespacech.html#a98ec286981dda179332f736f113ab8a5',1,'ch']]], + ['get_161',['get',['../structch_1_1syst_1_1analysis.html#aef7aa22862630508c22b57ecd436e31c',1,'ch::syst::analysis::get()'],['../structch_1_1syst_1_1bin.html#ae566871b3c3496a373d94804fe078026',1,'ch::syst::bin::get()'],['../classch_1_1syst_1_1bin__id.html#a16e43240ce229d97f80b2e6728c3f1d9',1,'ch::syst::bin_id::get()'],['../structch_1_1syst_1_1process.html#a02b9e1d72b3e3b9160f56859d6563227',1,'ch::syst::process::get()'],['../structch_1_1syst_1_1channel.html#a72ea9574f99f03f955df62612a43c088',1,'ch::syst::channel::get()'],['../structch_1_1syst_1_1era.html#a0608c96c7f833d6375c16881c3aeaaf4',1,'ch::syst::era::get()'],['../structch_1_1syst_1_1mass.html#a2f9dad5f252ac95b1628924fb7ad2b62',1,'ch::syst::mass::get()']]], + ['getaddthreshold_162',['GetAddThreshold',['../classch_1_1_bin_by_bin_factory.html#a466ad7528bd24e06dd48545a62695fc3',1,'ch::BinByBinFactory']]], + ['getautomcstatsbins_163',['GetAutoMCStatsBins',['../classch_1_1_combine_harvester.html#ab8656260b678698e1e86cc9a49397d19',1,'ch::CombineHarvester']]], + ['getaxishist_164',['GetAxisHist',['../_plotting_8h.html#aafd63f976dd4c5ae271062e0f91c2681',1,'Plotting.h']]], + ['getclonedth1_165',['GetClonedTH1',['../namespacech.html#a9db822b84dd7cf9f1d3bc76a6a741498',1,'ch']]], + ['getfixnorm_166',['GetFixNorm',['../classch_1_1_bin_by_bin_factory.html#abfa5acf851e5bc60cb444ab99154fe0b',1,'ch::BinByBinFactory']]], + ['getflag_167',['GetFlag',['../classch_1_1_combine_harvester.html#a9af81a9db9eb21d656005a3dee30ad6e',1,'ch::CombineHarvester']]], + ['getmaximumfracuncertbin_168',['GetMaximumFracUncertBin',['../classch_1_1_auto_rebin.html#a72dbe98c7aacd48dd99d03d2b957a934',1,'ch::AutoRebin']]], + ['getmergesaturatedbins_169',['GetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#ac7a3cd16dbec7d10aefef145b56eb20d',1,'ch::BinByBinFactory']]], + ['getmergethreshold_170',['GetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#ad8d08a80d3b39a82b45cd47fb6ac1181',1,'ch::BinByBinFactory']]], + ['getmergezerobins_171',['GetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#ac086255693968d3f93a6599e4eb84a06',1,'ch::BinByBinFactory']]], + ['getobservedrate_172',['GetObservedRate',['../classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f',1,'ch::CombineHarvester']]], + ['getobservedshape_173',['GetObservedShape',['../classch_1_1_combine_harvester.html#a0d3eca727963c0c14a3c04bbdce2ca5e',1,'ch::CombineHarvester']]], + ['getpadymax_174',['GetPadYMax',['../_plotting_8h.html#a94fa210a8324e72a82327860972746eb',1,'GetPadYMax(TPad *pad, double x_min, double x_max): Plotting.h'],['../_plotting_8h.html#afa343295bd66905121be203cb7c7cc03',1,'GetPadYMax(TPad *pad): Plotting.h']]], + ['getparameter_175',['GetParameter',['../classch_1_1_combine_harvester.html#ab994bb3d7ccc19475a28f5864831841e',1,'ch::CombineHarvester::GetParameter(std::string const &name)'],['../classch_1_1_combine_harvester.html#aea305007bd575b568a0e4cf92fdefb4c',1,'ch::CombineHarvester::GetParameter(std::string const &name) const']]], + ['getparameters_176',['GetParameters',['../classch_1_1_combine_harvester.html#acf6fe66749432f6ab0efdf5955f08df8',1,'ch::CombineHarvester']]], + ['getparfromws_177',['getParFromWs',['../classch_1_1_combine_harvester.html#ad45a973f5947f9a1a09c8d588f778954',1,'ch::CombineHarvester']]], + ['getpattern_178',['GetPattern',['../classch_1_1_bin_by_bin_factory.html#a6807dbf5552c3dbdf96204c506e44143',1,'ch::BinByBinFactory']]], + ['getpoissonerrors_179',['GetPoissonErrors',['../classch_1_1_bin_by_bin_factory.html#a3039403328320d2f2b44fed582da6445',1,'ch::BinByBinFactory']]], + ['getqualififedname_180',['GetQualififedName',['../namespacech.html#a082a87dbfd5b9d61198f7fd4b68e70f9',1,'ch']]], + ['getrate_181',['GetRate',['../classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689',1,'ch::CombineHarvester']]], + ['getratecorrelation_182',['GetRateCorrelation',['../classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0',1,'ch::CombineHarvester']]], + ['getratecovariance_183',['GetRateCovariance',['../classch_1_1_combine_harvester.html#a01d2c826aba1891b7a1a5ce2dba395e4',1,'ch::CombineHarvester']]], + ['getshape_184',['GetShape',['../classch_1_1_combine_harvester.html#a3d265eb50ea8ec70192788d985733d9d',1,'ch::CombineHarvester']]], + ['getshapewithuncertainty_185',['GetShapeWithUncertainty',['../classch_1_1_combine_harvester.html#a4601ceaf29711b11611545a3ee4a8fbb',1,'ch::CombineHarvester::GetShapeWithUncertainty(RooFitResult const &fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#afeae4c75ae1a122fdcf0a7f28b15a9d8',1,'ch::CombineHarvester::GetShapeWithUncertainty(RooFitResult const *fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#a749af47fa05e1e11b1488bfdb49efce5',1,'ch::CombineHarvester::GetShapeWithUncertainty()']]], + ['gettuple_186',['GetTuple',['../classch_1_1syst_1_1_syst_map_func.html#a7af1c3f39dacbbf5df37da61185a9f55',1,'ch::syst::SystMapFunc::GetTuple()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ad5ff5e296f946fa96f4b206fc64bae95',1,'ch::syst::SystMapAsymm::GetTuple()'],['../classch_1_1syst_1_1_syst_map.html#a164b50fafa77c9f471fca8abeec7aba2',1,'ch::syst::SystMap::GetTuple(ch::Process *p) const -> decltype(std::make_tuple(T::get(p)...))']]], + ['gettupleset_187',['GetTupleSet',['../classch_1_1syst_1_1_syst_map.html#a11bb44a14b6ca6d3da7a9d3a83ca00f0',1,'ch::syst::SystMap::GetTupleSet()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ac65e511162716bff85d69ac6b2a9b9cd',1,'ch::syst::SystMapAsymm::GetTupleSet()'],['../classch_1_1syst_1_1_syst_map_func.html#a9942c61e232bc13fb72c2cdc68ae56eb',1,'ch::syst::SystMapFunc::GetTupleSet()']]], + ['getuncertainty_188',['GetUncertainty',['../classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5',1,'ch::CombineHarvester::GetUncertainty()'],['../classch_1_1_combine_harvester.html#af71f64a1d858700bd16d98cee1c10c26',1,'ch::CombineHarvester::GetUncertainty(RooFitResult const *fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#aa7c0646bfab0a974c72fe815e33c5a32',1,'ch::CombineHarvester::GetUncertainty(RooFitResult const &fit, unsigned n_samples)']]], + ['getverbosity_189',['GetVerbosity',['../classch_1_1_bin_by_bin_factory.html#a0287bddb9ddd5ce6a2c00e8e2d092553',1,'ch::BinByBinFactory']]], + ['graphfromspline_190',['GraphFromSpline',['../namespacech.html#aefdcaba918224f404af9fcd9b53fa7bb',1,'ch']]], + ['groups_191',['groups',['../classch_1_1_parameter.html#a241d3b9acedcf0c2de4d44646e288019',1,'ch::Parameter']]] ]; diff --git a/search/all_7.html b/search/all_7.html index ee6d2e4a5de..8ddbf6c8e51 100644 --- a/search/all_7.html +++ b/search/all_7.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_7.js b/search/all_7.js index 6db4467e94d..44b1f097659 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -1,15 +1,14 @@ var searchData= [ - ['hasnegativebins_205',['HasNegativeBins',['../namespacech.html#a7825c01633c16c8c5d7c46f78acf6d4c',1,'ch']]], - ['hhhsystematics_2ecc_206',['HhhSystematics.cc',['../_hhh_systematics_8cc.html',1,'']]], - ['higgsconstraint_207',['higgsConstraint',['../namespacepython_1_1plotting.html#a1f64290754cdff288cedd257f2e2a1c2',1,'python::plotting']]], - ['histmapping_208',['HistMapping',['../structch_1_1_hist_mapping.html',1,'ch::HistMapping'],['../structch_1_1_hist_mapping.html#a13159d261f11d033b6281333d9e81377',1,'ch::HistMapping::HistMapping()'],['../structch_1_1_hist_mapping.html#a963916cdc08c796c0146d2ec63746d9f',1,'ch::HistMapping::HistMapping(std::string const &p, std::string const &c, std::string const &pat, std::string const &s_pat)']]], - ['histmapping_2ecc_209',['HistMapping.cc',['../_hist_mapping_8cc.html',1,'']]], - ['histmapping_2eh_210',['HistMapping.h',['../_hist_mapping_8h.html',1,'']]], - ['histograms_211',['histograms',['../classch_1_1_combine_harvester.html#ab1f4f4e953af6cb2f23b52a69b5900a8',1,'ch::CombineHarvester']]], - ['httsystematics_2eh_212',['HttSystematics.h',['../_htt_systematics_8h.html',1,'']]], - ['httsystematics_5fmssmlegacy_2ecc_213',['HttSystematics_MSSMLegacy.cc',['../_htt_systematics___m_s_s_m_legacy_8cc.html',1,'']]], - ['httsystematics_5fmssmupdate_2ecc_214',['HttSystematics_MSSMUpdate.cc',['../_htt_systematics___m_s_s_m_update_8cc.html',1,'']]], - ['httsystematics_5fsmlegacy_2ecc_215',['HttSystematics_SMLegacy.cc',['../_htt_systematics___s_m_legacy_8cc.html',1,'']]], - ['hybridnewgrid_2emd_216',['HybridNewGrid.md',['../_hybrid_new_grid_8md.html',1,'']]] + ['hasnegativebins_192',['HasNegativeBins',['../namespacech.html#a7825c01633c16c8c5d7c46f78acf6d4c',1,'ch']]], + ['hhhsystematics_2ecc_193',['HhhSystematics.cc',['../_hhh_systematics_8cc.html',1,'']]], + ['histmapping_194',['HistMapping',['../structch_1_1_hist_mapping.html',1,'ch::HistMapping'],['../structch_1_1_hist_mapping.html#a13159d261f11d033b6281333d9e81377',1,'ch::HistMapping::HistMapping()'],['../structch_1_1_hist_mapping.html#a963916cdc08c796c0146d2ec63746d9f',1,'ch::HistMapping::HistMapping(std::string const &p, std::string const &c, std::string const &pat, std::string const &s_pat)']]], + ['histmapping_2ecc_195',['HistMapping.cc',['../_hist_mapping_8cc.html',1,'']]], + ['histmapping_2eh_196',['HistMapping.h',['../_hist_mapping_8h.html',1,'']]], + ['histograms_197',['histograms',['../classch_1_1_combine_harvester.html#ab1f4f4e953af6cb2f23b52a69b5900a8',1,'ch::CombineHarvester']]], + ['httsystematics_2eh_198',['HttSystematics.h',['../_htt_systematics_8h.html',1,'']]], + ['httsystematics_5fmssmlegacy_2ecc_199',['HttSystematics_MSSMLegacy.cc',['../_htt_systematics___m_s_s_m_legacy_8cc.html',1,'']]], + ['httsystematics_5fmssmupdate_2ecc_200',['HttSystematics_MSSMUpdate.cc',['../_htt_systematics___m_s_s_m_update_8cc.html',1,'']]], + ['httsystematics_5fsmlegacy_2ecc_201',['HttSystematics_SMLegacy.cc',['../_htt_systematics___s_m_legacy_8cc.html',1,'']]], + ['hybridnewgrid_2emd_202',['HybridNewGrid.md',['../_hybrid_new_grid_8md.html',1,'']]] ]; diff --git a/search/all_8.html b/search/all_8.html index 7829aa40c2f..83c55ae2229 100644 --- a/search/all_8.html +++ b/search/all_8.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_8.js b/search/all_8.js index bb4cd6300bf..33b9590f84a 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -1,18 +1,16 @@ var searchData= [ - ['improveminimum_217',['ImproveMinimum',['../namespacepython_1_1plotting.html#a2cdb3efbda1fb72cb528658c8be0e0a2',1,'python::plotting']]], - ['inc_218',['Inc',['../classch_1_1_fn_timer.html#a68814f0e60141ebf55f8138f7dbb597d',1,'ch::FnTimer']]], - ['introduction_219',['Introduction',['../index.html',1,'']]], - ['init_220',['init',['../classch_1_1syst_1_1_syst_map.html#ad73ffd14fd958ff89a47d94ceb2a93bb',1,'ch::syst::SystMap::init()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a8f833b144d053121aa94e0988c6a3241',1,'ch::syst::SystMapAsymm::init()'],['../classch_1_1syst_1_1_syst_map_func.html#ad3274e0ca730ab55de5d2acf4bcc78f5',1,'ch::syst::SystMapFunc::init()']]], - ['insertobservation_221',['InsertObservation',['../classch_1_1_combine_harvester.html#acd2aec5d4b862d3edc79399ae0801f4c',1,'ch::CombineHarvester']]], - ['insertprocess_222',['InsertProcess',['../classch_1_1_combine_harvester.html#a8a4f3b4e71986fd61990e9a66e455f43',1,'ch::CombineHarvester']]], - ['insertsystematic_223',['InsertSystematic',['../classch_1_1_combine_harvester.html#ab6ba1e447ab5b290c22c23218ddf64cd',1,'ch::CombineHarvester']]], - ['integratefloatrange_224',['IntegrateFloatRange',['../namespacech.html#a35c9af4e2f53f4686e4c4bbba535eb35',1,'ch']]], - ['is_5ffake_225',['is_fake',['../structch_1_1_hist_mapping.html#ae18110c613c02c72501d599f71e26dfb',1,'ch::HistMapping']]], - ['is_5ffloat_226',['is_float',['../namespacech.html#acde782eef7132d07c095b4468de17dff',1,'ch']]], - ['isasymm_227',['IsAsymm',['../classch_1_1syst_1_1_syst_map.html#a9f9add04f874f11e5b43e19265321213',1,'ch::syst::SystMap::IsAsymm()'],['../classch_1_1syst_1_1_syst_map_asymm.html#af7ff8dd71898280eb7fa2c8735e4f84a',1,'ch::syst::SystMapAsymm::IsAsymm()'],['../classch_1_1syst_1_1_syst_map_func.html#aaf1800cf62304ece89a1217c53ab7e5c',1,'ch::syst::SystMapFunc::IsAsymm()']]], - ['isclose_228',['isclose',['../namespacepython_1_1plotting.html#a3730216ae300da42b4a0e1b28baad343',1,'python::plotting']]], - ['isdata_229',['IsData',['../structch_1_1_hist_mapping.html#a6568c0e7ed30fff12207aabd4ddce5d2',1,'ch::HistMapping']]], - ['ishist_230',['IsHist',['../structch_1_1_hist_mapping.html#a96625017130b3da2cfe0a6afdb0e76a1',1,'ch::HistMapping']]], - ['ispdf_231',['IsPdf',['../structch_1_1_hist_mapping.html#ac7903050d3b4015018857d32f6e9f94c',1,'ch::HistMapping']]] + ['inc_203',['Inc',['../classch_1_1_fn_timer.html#a68814f0e60141ebf55f8138f7dbb597d',1,'ch::FnTimer']]], + ['init_204',['init',['../classch_1_1syst_1_1_syst_map.html#ad73ffd14fd958ff89a47d94ceb2a93bb',1,'ch::syst::SystMap::init()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a8f833b144d053121aa94e0988c6a3241',1,'ch::syst::SystMapAsymm::init()'],['../classch_1_1syst_1_1_syst_map_func.html#ad3274e0ca730ab55de5d2acf4bcc78f5',1,'ch::syst::SystMapFunc::init()']]], + ['insertobservation_205',['InsertObservation',['../classch_1_1_combine_harvester.html#acd2aec5d4b862d3edc79399ae0801f4c',1,'ch::CombineHarvester']]], + ['insertprocess_206',['InsertProcess',['../classch_1_1_combine_harvester.html#a8a4f3b4e71986fd61990e9a66e455f43',1,'ch::CombineHarvester']]], + ['insertsystematic_207',['InsertSystematic',['../classch_1_1_combine_harvester.html#ab6ba1e447ab5b290c22c23218ddf64cd',1,'ch::CombineHarvester']]], + ['integratefloatrange_208',['IntegrateFloatRange',['../namespacech.html#a35c9af4e2f53f4686e4c4bbba535eb35',1,'ch']]], + ['introduction_209',['Introduction',['../index.html',1,'']]], + ['is_5ffake_210',['is_fake',['../structch_1_1_hist_mapping.html#ae18110c613c02c72501d599f71e26dfb',1,'ch::HistMapping']]], + ['is_5ffloat_211',['is_float',['../namespacech.html#acde782eef7132d07c095b4468de17dff',1,'ch']]], + ['isasymm_212',['IsAsymm',['../classch_1_1syst_1_1_syst_map_asymm.html#af7ff8dd71898280eb7fa2c8735e4f84a',1,'ch::syst::SystMapAsymm::IsAsymm()'],['../classch_1_1syst_1_1_syst_map_func.html#aaf1800cf62304ece89a1217c53ab7e5c',1,'ch::syst::SystMapFunc::IsAsymm()'],['../classch_1_1syst_1_1_syst_map.html#a9f9add04f874f11e5b43e19265321213',1,'ch::syst::SystMap::IsAsymm()']]], + ['isdata_213',['IsData',['../structch_1_1_hist_mapping.html#a6568c0e7ed30fff12207aabd4ddce5d2',1,'ch::HistMapping']]], + ['ishist_214',['IsHist',['../structch_1_1_hist_mapping.html#a96625017130b3da2cfe0a6afdb0e76a1',1,'ch::HistMapping']]], + ['ispdf_215',['IsPdf',['../structch_1_1_hist_mapping.html#ac7903050d3b4015018857d32f6e9f94c',1,'ch::HistMapping']]] ]; diff --git a/search/all_9.html b/search/all_9.html index e4242c7161f..1e263c134c4 100644 --- a/search/all_9.html +++ b/search/all_9.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_9.js b/search/all_9.js index 824302ce8a3..4db3d198c3f 100644 --- a/search/all_9.js +++ b/search/all_9.js @@ -1,8 +1,8 @@ var searchData= [ - ['join_232',['Join',['../namespacech.html#a6c065d2d25d44e2ca91d56cf6f97964f',1,'ch']]], - ['joinstr_233',['JoinStr',['../namespacech.html#abfd9e94a6fd4c33abe1bbd5fb03e7f28',1,'ch']]], - ['json_234',['json',['../namespacech.html#a9ce1f37a56b1499707629dc77b9f7853',1,'ch']]], - ['jsontools_2ecc_235',['JsonTools.cc',['../_json_tools_8cc.html',1,'']]], - ['jsontools_2eh_236',['JsonTools.h',['../_json_tools_8h.html',1,'']]] + ['join_216',['Join',['../namespacech.html#a6c065d2d25d44e2ca91d56cf6f97964f',1,'ch']]], + ['joinstr_217',['JoinStr',['../namespacech.html#abfd9e94a6fd4c33abe1bbd5fb03e7f28',1,'ch']]], + ['json_218',['json',['../namespacech.html#a9ce1f37a56b1499707629dc77b9f7853',1,'ch']]], + ['jsontools_2ecc_219',['JsonTools.cc',['../_json_tools_8cc.html',1,'']]], + ['jsontools_2eh_220',['JsonTools.h',['../_json_tools_8h.html',1,'']]] ]; diff --git a/search/all_a.html b/search/all_a.html index 47a4a78d2ed..3a6cac108c2 100644 --- a/search/all_a.html +++ b/search/all_a.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_a.js b/search/all_a.js index eec36924ca0..359c6389329 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -1,14 +1,12 @@ var searchData= [ - ['label_237',['label',['../struct_col_info.html#ae8b8720618660a433e3965c626a00580',1,'ColInfo::label()'],['../struct_bkg_info.html#a2550b7e9b4c739ee582288e1e1b493b2',1,'BkgInfo::label()']]], - ['launch_5ffunction_5ftimer_238',['LAUNCH_FUNCTION_TIMER',['../_logging_8h.html#a877d7811b666826b5f61749fab827a31',1,'Logging.h']]], - ['limitbandtgraphfromjson_239',['LimitBandTGraphFromJSON',['../namespacepython_1_1plotting.html#aa29285177084b6ed15e8f622f83ab4fa',1,'python::plotting']]], - ['limits_240',['Limits',['../limits.html',1,'']]], - ['limits_2emd_241',['Limits.md',['../_limits_8md.html',1,'']]], - ['limittgraphfromjson_242',['LimitTGraphFromJSON',['../namespacepython_1_1plotting.html#a62d4ff5f662142eb7f035c9d6a23499c',1,'python::plotting']]], - ['limittgraphfromjsonfile_243',['LimitTGraphFromJSONFile',['../namespacepython_1_1plotting.html#a82a5f62f79fe15d0c9b2b42d8ce61b7a',1,'python::plotting']]], - ['logging_2ecc_244',['Logging.cc',['../_logging_8cc.html',1,'']]], - ['logging_2eh_245',['Logging.h',['../_logging_8h.html',1,'']]], - ['logline_246',['LOGLINE',['../_logging_8h.html#a7c001e91758abea6ce1e5609a873c852',1,'LOGLINE(): Logging.h'],['../namespacech.html#a5903f0de2f0d18871f4dab7430d04830',1,'ch::LogLine()']]], - ['lumi_247',['lumi',['../struct_col_info.html#a89d79108973a299d202a3c3029aacaf6',1,'ColInfo']]] + ['label_221',['label',['../struct_col_info.html#ae8b8720618660a433e3965c626a00580',1,'ColInfo::label()'],['../struct_bkg_info.html#a2550b7e9b4c739ee582288e1e1b493b2',1,'BkgInfo::label()']]], + ['launch_5ffunction_5ftimer_222',['LAUNCH_FUNCTION_TIMER',['../_logging_8h.html#a877d7811b666826b5f61749fab827a31',1,'Logging.h']]], + ['limits_223',['Limits',['../limits.html',1,'']]], + ['limits_2emd_224',['Limits.md',['../_limits_8md.html',1,'']]], + ['logging_2ecc_225',['Logging.cc',['../_logging_8cc.html',1,'']]], + ['logging_2eh_226',['Logging.h',['../_logging_8h.html',1,'']]], + ['logline_227',['LOGLINE',['../_logging_8h.html#a7c001e91758abea6ce1e5609a873c852',1,'Logging.h']]], + ['logline_228',['LogLine',['../namespacech.html#a5903f0de2f0d18871f4dab7430d04830',1,'ch']]], + ['lumi_229',['lumi',['../struct_col_info.html#a89d79108973a299d202a3c3029aacaf6',1,'ColInfo']]] ]; diff --git a/search/all_b.html b/search/all_b.html index 1320a43f54c..130deb4ed9c 100644 --- a/search/all_b.html +++ b/search/all_b.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_b.js b/search/all_b.js index 7289addda3e..0f6688393bc 100644 --- a/search/all_b.js +++ b/search/all_b.js @@ -1,30 +1,23 @@ var searchData= [ - ['ma_2dtanb_2dlimits_2emd_248',['mA-tanb-Limits.md',['../m_a-tanb-_limits_8md.html',1,'']]], - ['main_249',['main',['../_s_m_legacy_example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): SMLegacyExample.cpp'],['../_m_s_s_m_yield_table_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): MSSMYieldTable.cpp'],['../_post_fit_shapes_from_workspace_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): PostFitShapesFromWorkspace.cpp']]], - ['main_2emd_250',['Main.md',['../_main_8md.html',1,'']]], - ['make_5frelative_251',['make_relative',['../namespacech.html#a2f4db67e7b9039935a58ea60b650041a',1,'ch']]], - ['make_5funique_252',['make_unique',['../namespacech.html#a1d79b15a838a8871759a19ab4efdf07f',1,'ch']]], - ['makeerrorband_253',['MakeErrorBand',['../namespacepython_1_1plotting.html#a57beab29bf647837ac4f0460335ee03d',1,'python::plotting']]], - ['makehist1d_254',['makeHist1D',['../namespacepython_1_1plotting.html#aed426fb163d0ac1a6bd8fed66acd6178',1,'python::plotting']]], - ['makehist2d_255',['makeHist2D',['../namespacepython_1_1plotting.html#a0c4fbbe51debf6af728af019e9a0a031',1,'python::plotting']]], - ['makemorphdebugplots_256',['MakeMorphDebugPlots',['../namespacech.html#a21ce0ae95c56bde7e1ecc1f21a839d2d',1,'ch']]], - ['makeratiohist_257',['MakeRatioHist',['../_plotting_8h.html#a526842799b4de3a542d8114989dba48d',1,'MakeRatioHist(): Plotting.h'],['../namespacepython_1_1plotting.html#ab38cd8888aa183c4f351925cd6d49478',1,'python.plotting.MakeRatioHist()']]], - ['maketchain_258',['MakeTChain',['../namespacepython_1_1plotting.html#a64ee6bffa0941169d495863f3294c9a4',1,'python::plotting']]], - ['makeunique_2eh_259',['MakeUnique.h',['../_make_unique_8h.html',1,'']]], - ['makevarbinhist2d_260',['makeVarBinHist2D',['../namespacepython_1_1plotting.html#a1b60082b4561b4b3af03a5916080162b',1,'python::plotting']]], - ['mass_261',['mass',['../structch_1_1syst_1_1mass.html',1,'ch::syst::mass'],['../classch_1_1_combine_harvester.html#a25c231ed8b1614c5d50f192210374474',1,'ch::CombineHarvester::mass()'],['../classch_1_1_object.html#ae2f9e80af391e105a6b6bc27107e3c9e',1,'ch::Object::mass()']]], - ['mass_5fset_262',['mass_set',['../classch_1_1_combine_harvester.html#a86674bf95164c39facfd5f9583aae613',1,'ch::CombineHarvester']]], - ['massesfromrange_263',['MassesFromRange',['../namespacech.html#a9aa7fae276e9a3482b0e2e0b7adf779b',1,'ch']]], - ['matchingprocess_264',['MatchingProcess',['../namespacech.html#a9c09b4e5a6dbbd49dfebd9235a2f60b5',1,'ch']]], - ['mergeandadd_265',['MergeAndAdd',['../classch_1_1_bin_by_bin_factory.html#a9873544209128b4d1dcbf9d897fe1094',1,'ch::BinByBinFactory']]], - ['mergebinerrors_266',['MergeBinErrors',['../classch_1_1_bin_by_bin_factory.html#a6e0495e815c6a5ac41b45fb200b860cf',1,'ch::BinByBinFactory::MergeBinErrors()'],['../classch_1_1_combine_harvester.html#a37e613f8c2c67871b4b3bc89c78a1f68',1,'ch::CombineHarvester::MergeBinErrors()']]], - ['mergedjson_267',['MergedJson',['../namespacech.html#aec2e836e1039ccd11ac13a201627c5c8',1,'ch::MergedJson(int argc, char *argv[])'],['../namespacech.html#a52e06fe8e122355225a7c485d88c22ff',1,'ch::MergedJson(std::vector< std::string > const &vec)']]], - ['modtdrstyle_268',['ModTDRStyle',['../_plotting___style_8h.html#a7f6399c7470d5331ac4c464cb14c86e1',1,'ModTDRStyle(int width, int height, double t, double b, double l, double r): Plotting_Style.h'],['../_plotting___style_8h.html#a25f3f929fadd38fd9423aaa6ef6ddd51',1,'ModTDRStyle(): Plotting_Style.h'],['../namespacepython_1_1plotting.html#a96d0e09c5c4ee59bd3e1c00050a3ac68',1,'python.plotting.ModTDRStyle()']]], - ['morphfunctions_2ecc_269',['MorphFunctions.cc',['../_morph_functions_8cc.html',1,'']]], - ['morphfunctions_2eh_270',['MorphFunctions.h',['../_morph_functions_8h.html',1,'']]], - ['model_20dependent_20limits_20using_20morphingmssmupdate_271',['Model dependent Limits using MorphingMSSMUpdate',['../_m_s_s_m_update_model_dep.html',1,'']]], - ['mssmyieldtable_2ecpp_272',['MSSMYieldTable.cpp',['../_m_s_s_m_yield_table_8cpp.html',1,'']]], - ['multiratiosplit_273',['MultiRatioSplit',['../namespacepython_1_1plotting.html#aba63da9138777e72b3516e1a76bd54af',1,'python::plotting']]], - ['multiratiosplitcolumns_274',['MultiRatioSplitColumns',['../namespacepython_1_1plotting.html#a774df4e4f7e5c1888a96ed042edd36b2',1,'python::plotting']]] + ['ma_2dtanb_2dlimits_2emd_230',['mA-tanb-Limits.md',['../m_a-tanb-_limits_8md.html',1,'']]], + ['main_231',['main',['../_s_m_legacy_example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): SMLegacyExample.cpp'],['../_m_s_s_m_yield_table_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): MSSMYieldTable.cpp'],['../_post_fit_shapes_from_workspace_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): PostFitShapesFromWorkspace.cpp']]], + ['main_2emd_232',['Main.md',['../_main_8md.html',1,'']]], + ['make_5frelative_233',['make_relative',['../namespacech.html#a2f4db67e7b9039935a58ea60b650041a',1,'ch']]], + ['make_5funique_234',['make_unique',['../namespacech.html#a1d79b15a838a8871759a19ab4efdf07f',1,'ch']]], + ['makemorphdebugplots_235',['MakeMorphDebugPlots',['../namespacech.html#a21ce0ae95c56bde7e1ecc1f21a839d2d',1,'ch']]], + ['makeratiohist_236',['MakeRatioHist',['../_plotting_8h.html#a526842799b4de3a542d8114989dba48d',1,'Plotting.h']]], + ['makeunique_2eh_237',['MakeUnique.h',['../_make_unique_8h.html',1,'']]], + ['mass_238',['mass',['../structch_1_1syst_1_1mass.html',1,'ch::syst::mass'],['../classch_1_1_combine_harvester.html#a25c231ed8b1614c5d50f192210374474',1,'ch::CombineHarvester::mass()'],['../classch_1_1_object.html#ae2f9e80af391e105a6b6bc27107e3c9e',1,'ch::Object::mass()']]], + ['mass_5fset_239',['mass_set',['../classch_1_1_combine_harvester.html#a86674bf95164c39facfd5f9583aae613',1,'ch::CombineHarvester']]], + ['massesfromrange_240',['MassesFromRange',['../namespacech.html#a9aa7fae276e9a3482b0e2e0b7adf779b',1,'ch']]], + ['matchingprocess_241',['MatchingProcess',['../namespacech.html#a9c09b4e5a6dbbd49dfebd9235a2f60b5',1,'ch']]], + ['mergeandadd_242',['MergeAndAdd',['../classch_1_1_bin_by_bin_factory.html#a9873544209128b4d1dcbf9d897fe1094',1,'ch::BinByBinFactory']]], + ['mergebinerrors_243',['MergeBinErrors',['../classch_1_1_combine_harvester.html#a37e613f8c2c67871b4b3bc89c78a1f68',1,'ch::CombineHarvester::MergeBinErrors()'],['../classch_1_1_bin_by_bin_factory.html#a6e0495e815c6a5ac41b45fb200b860cf',1,'ch::BinByBinFactory::MergeBinErrors()']]], + ['mergedjson_244',['MergedJson',['../namespacech.html#aec2e836e1039ccd11ac13a201627c5c8',1,'ch::MergedJson(int argc, char *argv[])'],['../namespacech.html#a52e06fe8e122355225a7c485d88c22ff',1,'ch::MergedJson(std::vector< std::string > const &vec)']]], + ['model_20dependent_20limits_20using_20morphingmssmupdate_245',['Model dependent Limits using MorphingMSSMUpdate',['../_m_s_s_m_update_model_dep.html',1,'']]], + ['modtdrstyle_246',['ModTDRStyle',['../_plotting___style_8h.html#a7f6399c7470d5331ac4c464cb14c86e1',1,'ModTDRStyle(int width, int height, double t, double b, double l, double r): Plotting_Style.h'],['../_plotting___style_8h.html#a25f3f929fadd38fd9423aaa6ef6ddd51',1,'ModTDRStyle(): Plotting_Style.h']]], + ['morphfunctions_2ecc_247',['MorphFunctions.cc',['../_morph_functions_8cc.html',1,'']]], + ['morphfunctions_2eh_248',['MorphFunctions.h',['../_morph_functions_8h.html',1,'']]], + ['mssmyieldtable_2ecpp_249',['MSSMYieldTable.cpp',['../_m_s_s_m_yield_table_8cpp.html',1,'']]] ]; diff --git a/search/all_c.html b/search/all_c.html index 32a3a1b8fdb..3dd5af06d56 100644 --- a/search/all_c.html +++ b/search/all_c.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_c.js b/search/all_c.js index ce9ac95d69e..be502f2e6df 100644 --- a/search/all_c.js +++ b/search/all_c.js @@ -1,7 +1,6 @@ var searchData= [ - ['name_275',['name',['../classch_1_1_parameter.html#ac69867be1fd0c821d4382210ed6320e2',1,'ch::Parameter::name()'],['../classch_1_1_systematic.html#a872469110fe349da45922431d6d24bc7',1,'ch::Systematic::name()']]], - ['newinterpolate_276',['NewInterpolate',['../namespacepython_1_1plotting.html#ac3c06e73bd892e15ea8fc2428d6cef8e',1,'python::plotting']]], - ['no_5fnorm_5frate_277',['no_norm_rate',['../classch_1_1_process.html#a02bffdf7ced997cc8bdd51953c357f27',1,'ch::Process']]], - ['norm_278',['norm',['../classch_1_1_process.html#a5e09f829f8bda2f3b241500fba58f985',1,'ch::Process']]] + ['name_250',['name',['../classch_1_1_parameter.html#ac69867be1fd0c821d4382210ed6320e2',1,'ch::Parameter::name()'],['../classch_1_1_systematic.html#a872469110fe349da45922431d6d24bc7',1,'ch::Systematic::name()']]], + ['no_5fnorm_5frate_251',['no_norm_rate',['../classch_1_1_process.html#a02bffdf7ced997cc8bdd51953c357f27',1,'ch::Process']]], + ['norm_252',['norm',['../classch_1_1_process.html#a5e09f829f8bda2f3b241500fba58f985',1,'ch::Process']]] ]; diff --git a/search/all_d.html b/search/all_d.html index a3860966d86..af7f2f0f50f 100644 --- a/search/all_d.html +++ b/search/all_d.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_d.js b/search/all_d.js index 3f7e3a53020..e555eb17d1a 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -1,15 +1,15 @@ var searchData= [ - ['object_279',['Object',['../classch_1_1_object.html',1,'ch::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_280',['Object.cc',['../_object_8cc.html',1,'']]], - ['object_2eh_281',['Object.h',['../_object_8h.html',1,'']]], - ['observable_282',['observable',['../classch_1_1_process.html#ab032210cfba1f6edc94218ed4a6411ed',1,'ch::Process']]], - ['observation_283',['Observation',['../classch_1_1_observation.html',1,'ch::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_2ecc_284',['Observation.cc',['../_observation_8cc.html',1,'']]], - ['observation_2eh_285',['Observation.h',['../_observation_8h.html',1,'']]], - ['onepad_286',['OnePad',['../_plotting_8h.html#aa098641a0337d718d1074531133b884f',1,'OnePad(): Plotting.h'],['../namespacepython_1_1plotting.html#aedf242792ebe14a722fed350f225d53c',1,'python.plotting.OnePad()']]], - ['openfromtfile_287',['OpenFromTFile',['../namespacech.html#aa859d4d87eb7f27b2499e55c73789d98',1,'ch::OpenFromTFile(std::string const &fullpath)'],['../namespacech.html#af7fe148f865bc9674341c9aa36d875ef',1,'ch::OpenFromTFile(TFile *file, std::string const &path)']]], - ['operator_28_29_288',['operator()',['../classch_1_1syst_1_1_syst_map.html#a7f819b6a66c8085b67e0e21e289c9e48',1,'ch::syst::SystMap::operator()()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ae50337ca6a1123df4add8140ab51c6f3',1,'ch::syst::SystMapAsymm::operator()()'],['../classch_1_1syst_1_1_syst_map_func.html#a5f6c2440666ecd77fd44075d019fb584',1,'ch::syst::SystMapFunc::operator()()']]], - ['operator_3c_3c_289',['operator<<',['../structch_1_1_hist_mapping.html#a082b489ab66940ac856997bfcd1ced7a',1,'ch::HistMapping::operator<<()'],['../classch_1_1_observation.html#a987488ba4dcac7dee972febeeab0b648',1,'ch::Observation::operator<<()'],['../classch_1_1_parameter.html#a4b23aafe9b144c9d6affc3a86d1efeb5',1,'ch::Parameter::operator<<()'],['../classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29',1,'ch::Process::operator<<()'],['../classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8',1,'ch::Systematic::operator<<()'],['../namespacech.html#a40560251a7c7ee58a41bd890f1963175',1,'ch::operator<<(std::ostream &out, HistMapping const &val)'],['../namespacech.html#a2e35146227543a2245a91020259faaa8',1,'ch::operator<<(std::ostream &out, Observation const &val)'],['../namespacech.html#aad11ca6f4dfe946a28a052117116ee04',1,'ch::operator<<(std::ostream &out, Parameter &val)'],['../namespacech.html#a8a22853e782855a8d9c00d074a8749dc',1,'ch::operator<<(std::ostream &out, Process const &val)'],['../namespacech.html#a5874d67ae782c76e78e6b9afcadbe784',1,'ch::operator<<(std::ostream &out, Systematic const &val)']]], - ['operator_3d_290',['operator=',['../classch_1_1_combine_harvester.html#a537e7bf110bf4e466d5c39843e76fd03',1,'ch::CombineHarvester::operator=()'],['../classch_1_1_object.html#a852658426c7ab24d17a8cf5b33ec6805',1,'ch::Object::operator=()'],['../classch_1_1_observation.html#a64da98f3d291c5f1b9cdd26d9e6999c5',1,'ch::Observation::operator=()'],['../classch_1_1_parameter.html#ae6cafb3e152e109ff3e3e7b829eb58fe',1,'ch::Parameter::operator=()'],['../classch_1_1_process.html#ae59eb8e73740459d47205a32d23b517a',1,'ch::Process::operator=()'],['../classch_1_1_systematic.html#a14586d1bc593e9564ce15736ad8367c4',1,'ch::Systematic::operator=()']]] + ['object_253',['Object',['../classch_1_1_object.html',1,'ch::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_254',['Object.cc',['../_object_8cc.html',1,'']]], + ['object_2eh_255',['Object.h',['../_object_8h.html',1,'']]], + ['observable_256',['observable',['../classch_1_1_process.html#ab032210cfba1f6edc94218ed4a6411ed',1,'ch::Process']]], + ['observation_257',['Observation',['../classch_1_1_observation.html',1,'ch::Observation'],['../classch_1_1_observation.html#af37c17965ed6342871c1154df190e9cf',1,'ch::Observation::Observation(Observation &&other)'],['../classch_1_1_observation.html#a9f88f5220628a9d923539c3fe8a0669a',1,'ch::Observation::Observation(Observation const &other)'],['../classch_1_1_observation.html#a56897e63ca73b158071633e3f379e8c5',1,'ch::Observation::Observation()']]], + ['observation_2ecc_258',['Observation.cc',['../_observation_8cc.html',1,'']]], + ['observation_2eh_259',['Observation.h',['../_observation_8h.html',1,'']]], + ['onepad_260',['OnePad',['../_plotting_8h.html#aa098641a0337d718d1074531133b884f',1,'Plotting.h']]], + ['openfromtfile_261',['OpenFromTFile',['../namespacech.html#af7fe148f865bc9674341c9aa36d875ef',1,'ch::OpenFromTFile(TFile *file, std::string const &path)'],['../namespacech.html#aa859d4d87eb7f27b2499e55c73789d98',1,'ch::OpenFromTFile(std::string const &fullpath)']]], + ['operator_28_29_262',['operator()',['../classch_1_1syst_1_1_syst_map.html#a7f819b6a66c8085b67e0e21e289c9e48',1,'ch::syst::SystMap::operator()()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ae50337ca6a1123df4add8140ab51c6f3',1,'ch::syst::SystMapAsymm::operator()()'],['../classch_1_1syst_1_1_syst_map_func.html#a5f6c2440666ecd77fd44075d019fb584',1,'ch::syst::SystMapFunc::operator()()']]], + ['operator_3c_3c_263',['operator<<',['../namespacech.html#a5874d67ae782c76e78e6b9afcadbe784',1,'ch::operator<<(std::ostream &out, Systematic const &val)'],['../namespacech.html#a8a22853e782855a8d9c00d074a8749dc',1,'ch::operator<<(std::ostream &out, Process const &val)'],['../namespacech.html#aad11ca6f4dfe946a28a052117116ee04',1,'ch::operator<<(std::ostream &out, Parameter &val)'],['../namespacech.html#a2e35146227543a2245a91020259faaa8',1,'ch::operator<<(std::ostream &out, Observation const &val)'],['../namespacech.html#a40560251a7c7ee58a41bd890f1963175',1,'ch::operator<<(std::ostream &out, HistMapping const &val)'],['../classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8',1,'ch::Systematic::operator<<()'],['../classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29',1,'ch::Process::operator<<()'],['../classch_1_1_parameter.html#a4b23aafe9b144c9d6affc3a86d1efeb5',1,'ch::Parameter::operator<<()'],['../classch_1_1_observation.html#a987488ba4dcac7dee972febeeab0b648',1,'ch::Observation::operator<<()'],['../structch_1_1_hist_mapping.html#a082b489ab66940ac856997bfcd1ced7a',1,'ch::HistMapping::operator<<()']]], + ['operator_3d_264',['operator=',['../classch_1_1_parameter.html#ae6cafb3e152e109ff3e3e7b829eb58fe',1,'ch::Parameter::operator=()'],['../classch_1_1_process.html#ae59eb8e73740459d47205a32d23b517a',1,'ch::Process::operator=()'],['../classch_1_1_systematic.html#a14586d1bc593e9564ce15736ad8367c4',1,'ch::Systematic::operator=()'],['../classch_1_1_observation.html#a64da98f3d291c5f1b9cdd26d9e6999c5',1,'ch::Observation::operator=()'],['../classch_1_1_object.html#a852658426c7ab24d17a8cf5b33ec6805',1,'ch::Object::operator=()'],['../classch_1_1_combine_harvester.html#a537e7bf110bf4e466d5c39843e76fd03',1,'ch::CombineHarvester::operator=()']]] ]; diff --git a/search/all_e.html b/search/all_e.html index 293161891f0..e25df423a95 100644 --- a/search/all_e.html +++ b/search/all_e.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_e.js b/search/all_e.js index 961e34ec4f2..c5c5eb390df 100644 --- a/search/all_e.js +++ b/search/all_e.js @@ -1,46 +1,48 @@ var searchData= [ - ['parameter_291',['Parameter',['../classch_1_1_parameter.html',1,'ch::Parameter'],['../classch_1_1_parameter.html#ac3be609032d840cf477cfa3cf7982c7a',1,'ch::Parameter::Parameter()'],['../classch_1_1_parameter.html#aa4ee9592da987b521e06b99bb2323a68',1,'ch::Parameter::Parameter(Parameter const &other)'],['../classch_1_1_parameter.html#ad1459e77cbe8a5a4814ca9b90be346fd',1,'ch::Parameter::Parameter(Parameter &&other)']]], - ['parameter_2ecc_292',['Parameter.cc',['../_parameter_8cc.html',1,'']]], - ['parameter_2eh_293',['Parameter.h',['../_parameter_8h.html',1,'']]], - ['parametersbyname_294',['ParametersByName',['../namespacech.html#aef408f71dec36c69cd2e145505212c49',1,'ch']]], - ['paramfromfilename_295',['ParamFromFilename',['../namespacepython_1_1plotting.html#a6a1dcbff61edbcd15e68682f3e8836dc',1,'python::plotting']]], - ['parsecombineworkspace_296',['ParseCombineWorkspace',['../namespacech.html#a5ae8a88e9e0d2120deec06e553a525f6',1,'ch']]], - ['parsecombineworkspace_2ecc_297',['ParseCombineWorkspace.cc',['../_parse_combine_workspace_8cc.html',1,'']]], - ['parsecombineworkspace_2eh_298',['ParseCombineWorkspace.h',['../_parse_combine_workspace_8h.html',1,'']]], - ['parsecombineworkspacepy_299',['ParseCombineWorkspacePy',['../namespacech.html#af7bcceb32c2f4a82fe1de32a93d0dfa3',1,'ch']]], - ['parsedatacard_300',['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_301',['ParseFileLines',['../namespacech.html#a23a4079d5c68e21d9697570255e08224',1,'ch']]], - ['pattern_302',['pattern',['../structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310',1,'ch::HistMapping']]], - ['pdf_303',['pdf',['../classch_1_1_process.html#a0fdc4f6b03943eb043b14428ddcdb5cd',1,'ch::Process']]], - ['pdf_5fd_304',['pdf_d',['../classch_1_1_systematic.html#a95c61a9b2de9df89a598c7eced3f61b3',1,'ch::Systematic']]], - ['pdf_5fu_305',['pdf_u',['../classch_1_1_systematic.html#aa5cd1f87ffe9aadcb41fed7bd746bdef',1,'ch::Systematic']]], - ['pdfs_306',['pdfs',['../classch_1_1_combine_harvester.html#a2b38f8591d1dc642136160c96112ec55',1,'ch::CombineHarvester']]], - ['plotting_307',['plotting',['../namespacepython_1_1plotting.html',1,'python']]], - ['plotting_2eh_308',['Plotting.h',['../_plotting_8h.html',1,'']]], - ['plotting_2epy_309',['plotting.py',['../plotting_8py.html',1,'']]], - ['plotting_5fcontours_2eh_310',['Plotting_Contours.h',['../_plotting___contours_8h.html',1,'']]], - ['plotting_5fstyle_2eh_311',['Plotting_Style.h',['../_plotting___style_8h.html',1,'']]], - ['positionedlegend_312',['PositionedLegend',['../_plotting_8h.html#a658a1da4505b61eb5a0f0db01c01e161',1,'PositionedLegend(): Plotting.h'],['../namespacepython_1_1plotting.html#ad7f839ac00738ce41f8503ac96e671cd',1,'python.plotting.PositionedLegend()']]], - ['post_2dfit_20distributions_313',['Post-fit Distributions',['../post-fit-shapes-ws.html',1,'']]], - ['postfitshapesfromworkspace_2ecpp_314',['PostFitShapesFromWorkspace.cpp',['../_post_fit_shapes_from_workspace_8cpp.html',1,'']]], - ['postfitshapesfromworkspace_2emd_315',['PostFitShapesFromWorkspace.md',['../_post_fit_shapes_from_workspace_8md.html',1,'']]], - ['print_316',['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()']]], - ['printall_317',['PrintAll',['../classch_1_1_combine_harvester.html#a63ffe9b598a7a6dc9f3cab118b3703df',1,'ch::CombineHarvester']]], - ['printheader_318',['PrintHeader',['../classch_1_1_observation.html#a4f8f4cc0a612fc88effb03189daa3b13',1,'ch::Observation::PrintHeader()'],['../classch_1_1_parameter.html#a62b6307c0675a81c420b9d6807928227',1,'ch::Parameter::PrintHeader()'],['../classch_1_1_process.html#ab2cc280e1babe330441de6791e06c2c1',1,'ch::Process::PrintHeader()'],['../classch_1_1_systematic.html#aef9f627405060f65815dc15a1d4abbaf',1,'ch::Systematic::PrintHeader()']]], - ['printobs_319',['PrintObs',['../classch_1_1_combine_harvester.html#a28d52375fa2e13d80b6db9aa8b10113b',1,'ch::CombineHarvester']]], - ['printparams_320',['PrintParams',['../classch_1_1_combine_harvester.html#aadea1e068eb474ba7919b1894033e3d3',1,'ch::CombineHarvester']]], - ['printproc_321',['PrintProc',['../namespacech.html#a433334f3da17eb2886510a97df0d2ef4',1,'ch']]], - ['printprocs_322',['PrintProcs',['../classch_1_1_combine_harvester.html#ac65ce5523ef5b0fdcab6c2c6d21b49f4',1,'ch::CombineHarvester']]], - ['printsystematic_323',['PrintSystematic',['../namespacech.html#aaec3acecfcee89ac9d4dfe9d0c20827c',1,'ch']]], - ['printsysts_324',['PrintSysts',['../classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d',1,'ch::CombineHarvester']]], - ['process_325',['process',['../structch_1_1syst_1_1process.html',1,'ch::syst::process'],['../classch_1_1_process.html',1,'ch::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#a740d853956df951a7cb08094e21f0332',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_2ecc_326',['Process.cc',['../_process_8cc.html',1,'']]], - ['process_2eh_327',['Process.h',['../_process_8h.html',1,'']]], - ['process_5frgx_328',['process_rgx',['../classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329',1,'ch::CombineHarvester']]], - ['process_5fset_329',['process_set',['../classch_1_1_combine_harvester.html#a54433aa1b16fad10c0d29f5d8c789716',1,'ch::CombineHarvester']]], - ['procs_330',['procs',['../struct_bkg_info.html#ae3185634cdea6c4c5d468767a4c41292',1,'BkgInfo']]], - ['python_331',['python',['../namespacepython.html',1,'']]], - ['python_20interface_332',['Python Interface',['../python-interface.html',1,'']]], - ['pythoninterface_2emd_333',['PythonInterface.md',['../_python_interface_8md.html',1,'']]] + ['param_5fstr_5fext_265',['param_str_ext',['../classch_1_1_systematic.html#a995bc6ca55d509c76ba92322631e730b',1,'ch::Systematic']]], + ['parameter_266',['Parameter',['../classch_1_1_parameter.html',1,'ch::Parameter'],['../classch_1_1_parameter.html#ad1459e77cbe8a5a4814ca9b90be346fd',1,'ch::Parameter::Parameter(Parameter &&other)'],['../classch_1_1_parameter.html#aa4ee9592da987b521e06b99bb2323a68',1,'ch::Parameter::Parameter(Parameter const &other)'],['../classch_1_1_parameter.html#ac3be609032d840cf477cfa3cf7982c7a',1,'ch::Parameter::Parameter()']]], + ['parameter_2ecc_267',['Parameter.cc',['../_parameter_8cc.html',1,'']]], + ['parameter_2eh_268',['Parameter.h',['../_parameter_8h.html',1,'']]], + ['parametersbyname_269',['ParametersByName',['../namespacech.html#aef408f71dec36c69cd2e145505212c49',1,'ch']]], + ['parsecombineworkspace_270',['ParseCombineWorkspace',['../namespacech.html#a5ae8a88e9e0d2120deec06e553a525f6',1,'ch']]], + ['parsecombineworkspace_2ecc_271',['ParseCombineWorkspace.cc',['../_parse_combine_workspace_8cc.html',1,'']]], + ['parsecombineworkspace_2eh_272',['ParseCombineWorkspace.h',['../_parse_combine_workspace_8h.html',1,'']]], + ['parsecombineworkspacepy_273',['ParseCombineWorkspacePy',['../namespacech.html#af7bcceb32c2f4a82fe1de32a93d0dfa3',1,'ch']]], + ['parsedatacard_274',['ParseDatacard',['../classch_1_1_combine_harvester.html#a4b7fe2fb7c1b3ba4da84fbd123388f77',1,'ch::CombineHarvester::ParseDatacard(std::string const &filename, std::string parse_rule="")'],['../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)']]], + ['parsefilelines_275',['ParseFileLines',['../namespacech.html#a23a4079d5c68e21d9697570255e08224',1,'ch']]], + ['pattern_276',['pattern',['../structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310',1,'ch::HistMapping']]], + ['pdf_277',['pdf',['../classch_1_1_process.html#a0fdc4f6b03943eb043b14428ddcdb5cd',1,'ch::Process']]], + ['pdf_5fd_278',['pdf_d',['../classch_1_1_systematic.html#a95c61a9b2de9df89a598c7eced3f61b3',1,'ch::Systematic']]], + ['pdf_5fu_279',['pdf_u',['../classch_1_1_systematic.html#aa5cd1f87ffe9aadcb41fed7bd746bdef',1,'ch::Systematic']]], + ['pdfs_280',['pdfs',['../classch_1_1_combine_harvester.html#a2b38f8591d1dc642136160c96112ec55',1,'ch::CombineHarvester']]], + ['plotting_281',['plotting',['../namespaceplotting.html',1,'']]], + ['plotting_2eh_282',['Plotting.h',['../_plotting_8h.html',1,'']]], + ['plotting_2epy_283',['plotting.py',['../plotting_8py.html',1,'']]], + ['plotting_5fcontours_2eh_284',['Plotting_Contours.h',['../_plotting___contours_8h.html',1,'']]], + ['plotting_5fstyle_2eh_285',['Plotting_Style.h',['../_plotting___style_8h.html',1,'']]], + ['positionedlegend_286',['PositionedLegend',['../_plotting_8h.html#a658a1da4505b61eb5a0f0db01c01e161',1,'Plotting.h']]], + ['post_2dfit_20distributions_287',['Post-fit Distributions',['../post-fit-shapes-ws.html',1,'']]], + ['postfitshapesfromworkspace_2ecpp_288',['PostFitShapesFromWorkspace.cpp',['../_post_fit_shapes_from_workspace_8cpp.html',1,'']]], + ['postfitshapesfromworkspace_2emd_289',['PostFitShapesFromWorkspace.md',['../_post_fit_shapes_from_workspace_8md.html',1,'']]], + ['print_290',['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()'],['../structch_1_1tupleprint_1_1_tuple_printer.html#ac56a48381e7a162e1d0c4508045678ff',1,'ch::tupleprint::TuplePrinter::print()']]], + ['printall_291',['PrintAll',['../classch_1_1_combine_harvester.html#a63ffe9b598a7a6dc9f3cab118b3703df',1,'ch::CombineHarvester']]], + ['printheader_292',['PrintHeader',['../classch_1_1_observation.html#a4f8f4cc0a612fc88effb03189daa3b13',1,'ch::Observation::PrintHeader()'],['../classch_1_1_parameter.html#a62b6307c0675a81c420b9d6807928227',1,'ch::Parameter::PrintHeader()'],['../classch_1_1_process.html#ab2cc280e1babe330441de6791e06c2c1',1,'ch::Process::PrintHeader()'],['../classch_1_1_systematic.html#aef9f627405060f65815dc15a1d4abbaf',1,'ch::Systematic::PrintHeader()']]], + ['printobs_293',['PrintObs',['../classch_1_1_combine_harvester.html#a28d52375fa2e13d80b6db9aa8b10113b',1,'ch::CombineHarvester']]], + ['printparams_294',['PrintParams',['../classch_1_1_combine_harvester.html#aadea1e068eb474ba7919b1894033e3d3',1,'ch::CombineHarvester']]], + ['printproc_295',['PrintProc',['../namespacech.html#a433334f3da17eb2886510a97df0d2ef4',1,'ch']]], + ['printprocs_296',['PrintProcs',['../classch_1_1_combine_harvester.html#ac65ce5523ef5b0fdcab6c2c6d21b49f4',1,'ch::CombineHarvester']]], + ['printsystematic_297',['PrintSystematic',['../namespacech.html#aaec3acecfcee89ac9d4dfe9d0c20827c',1,'ch']]], + ['printsysts_298',['PrintSysts',['../classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d',1,'ch::CombineHarvester']]], + ['process_299',['Process',['../classch_1_1_process.html',1,'ch']]], + ['process_300',['process',['../structch_1_1syst_1_1process.html',1,'ch::syst']]], + ['process_301',['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)'],['../classch_1_1_process.html#aa2f461778b7c77eca21aad2989d15184',1,'ch::Process::Process()']]], + ['process_302',['process',['../classch_1_1_object.html#a740d853956df951a7cb08094e21f0332',1,'ch::Object::process()'],['../classch_1_1_combine_harvester.html#a3afe330e302ad37b9fd69a821b8b4099',1,'ch::CombineHarvester::process()'],['../structch_1_1_hist_mapping.html#aa63cc6db2afbb37ee7559452b7966816',1,'ch::HistMapping::process()']]], + ['process_2ecc_303',['Process.cc',['../_process_8cc.html',1,'']]], + ['process_2eh_304',['Process.h',['../_process_8h.html',1,'']]], + ['process_5frgx_305',['process_rgx',['../classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329',1,'ch::CombineHarvester']]], + ['process_5fset_306',['process_set',['../classch_1_1_combine_harvester.html#a54433aa1b16fad10c0d29f5d8c789716',1,'ch::CombineHarvester']]], + ['procs_307',['procs',['../struct_bkg_info.html#ae3185634cdea6c4c5d468767a4c41292',1,'BkgInfo']]], + ['python_20interface_308',['Python Interface',['../python-interface.html',1,'']]], + ['pythoninterface_2emd_309',['PythonInterface.md',['../_python_interface_8md.html',1,'']]] ]; diff --git a/search/all_f.html b/search/all_f.html index ca42a522fbf..b23da6ce48b 100644 --- a/search/all_f.html +++ b/search/all_f.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/all_f.js b/search/all_f.js index 165f23f6972..ccaf6204872 100644 --- a/search/all_f.js +++ b/search/all_f.js @@ -1,29 +1,22 @@ var searchData= [ - ['roomorphingpdf_334',['RooMorphingPdf',['../intro_morph.html',1,'']]], - ['reproducing_20run_201_20h_2d_3etautau_20results_335',['Reproducing Run 1 H->tautau results',['../introrun1_h_t_t.html',1,'']]], - ['range_5fd_336',['range_d',['../classch_1_1_parameter.html#ad0cf0c6b5ad729e7c991ab468bc9f8d2',1,'ch::Parameter']]], - ['range_5fu_337',['range_u',['../classch_1_1_parameter.html#ade82fbedd8ad452e061b84f58e8ed8f8',1,'ch::Parameter']]], - ['rate_338',['rate',['../classch_1_1_observation.html#aa82898ea9469ea6e9346410bfe4b9754',1,'ch::Observation::rate()'],['../classch_1_1_process.html#a4683fb53999bbc1cbefb5637a4843e55',1,'ch::Process::rate()']]], - ['rebin_339',['Rebin',['../classch_1_1_auto_rebin.html#af9525ed197d8b5742695c729645ea4a2',1,'ch::AutoRebin::Rebin()'],['../namespacepython_1_1plotting.html#a063d0ef08d16c34e8b7f56ba484d202d',1,'python.plotting.rebin()']]], - ['rebinhist_340',['RebinHist',['../namespacech.html#a2cbcfd049543bfe9f63958bc671deeae',1,'ch']]], - ['removegraphxduplicates_341',['RemoveGraphXDuplicates',['../namespacepython_1_1plotting.html#aac0d06e709f0d32c009900f9a3fbed1e',1,'python::plotting']]], - ['removegraphyabove_342',['RemoveGraphYAbove',['../namespacepython_1_1plotting.html#abdd045f87fa96a1274213a85208e8a45',1,'python::plotting']]], - ['removegraphyall_343',['RemoveGraphYAll',['../namespacepython_1_1plotting.html#a41521655e488b97e5e50289fec090fd6',1,'python::plotting']]], - ['removegroup_344',['RemoveGroup',['../classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810',1,'ch::CombineHarvester']]], - ['removeinxrange_345',['RemoveInXRange',['../namespacepython_1_1plotting.html#ad36eb972250a37d6faac15d84d764af6',1,'python::plotting']]], - ['removenearmin_346',['RemoveNearMin',['../namespacepython_1_1plotting.html#af7c1d446d7f6d584150ffa60c7b2bd77',1,'python::plotting']]], - ['removesmalldelta_347',['RemoveSmallDelta',['../namespacepython_1_1plotting.html#a7f7ff82b2cb2e897aa848dd097228507',1,'python::plotting']]], - ['renameautomcstatsbin_348',['RenameAutoMCStatsBin',['../classch_1_1_combine_harvester.html#a44d791bc4812feb68729e7660fd3e5b3',1,'ch::CombineHarvester']]], - ['renamegroup_349',['RenameGroup',['../classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9',1,'ch::CombineHarvester']]], - ['renameparameter_350',['RenameParameter',['../classch_1_1_combine_harvester.html#a2825b9eeec47f7b23f93520bf615b581',1,'ch::CombineHarvester']]], - ['renameparinws_351',['renameParInWs',['../classch_1_1_combine_harvester.html#a45dc5b119b4c0618c0f3e614d48ae2d6',1,'ch::CombineHarvester']]], - ['renamesystematic_352',['RenameSystematic',['../classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9',1,'ch::CombineHarvester']]], - ['reproducerun1httdatacards_2emd_353',['ReproduceRun1HTTDatacards.md',['../_reproduce_run1_h_t_t_datacards_8md.html',1,'']]], - ['restorebinning_354',['RestoreBinning',['../namespacech.html#a23cd9444931a49de080638458f722501',1,'ch']]], - ['reversebins_355',['ReverseBins',['../_post_fit_shapes_from_workspace_8cpp.html#a48acb519f981bec18bc41e658431176d',1,'PostFitShapesFromWorkspace.cpp']]], - ['rezerotgraph_356',['ReZeroTGraph',['../_plotting_8h.html#af2524f9f02ac66a16164c87bfc149628',1,'ReZeroTGraph(): Plotting.h'],['../namespacepython_1_1plotting.html#a206835e129a1cec888da0a48e8762bd9',1,'python.plotting.ReZeroTGraph()']]], - ['roccurvefrom1dhists_357',['RocCurveFrom1DHists',['../namespacepython_1_1plotting.html#a299b2acd01d8e1d8d646a72164323fca',1,'python::plotting']]], - ['roomorphingpdf_2emd_358',['RooMorphingPdf.md',['../_roo_morphing_pdf_8md.html',1,'']]], - ['run_359',['Run',['../classch_1_1_c_m_s_hist_func_factory.html#a4e057f77b7fcdde3e98967bb5632717e',1,'ch::CMSHistFuncFactory::Run(CombineHarvester &cb, RooWorkspace &ws, std::map< std::string, std::string > process_vs_norm_postfix_map)'],['../classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60',1,'ch::CMSHistFuncFactory::Run(CombineHarvester &cb, RooWorkspace &ws)']]] + ['range_5fd_310',['range_d',['../classch_1_1_parameter.html#ad0cf0c6b5ad729e7c991ab468bc9f8d2',1,'ch::Parameter']]], + ['range_5fu_311',['range_u',['../classch_1_1_parameter.html#ade82fbedd8ad452e061b84f58e8ed8f8',1,'ch::Parameter']]], + ['rate_312',['rate',['../classch_1_1_observation.html#aa82898ea9469ea6e9346410bfe4b9754',1,'ch::Observation::rate()'],['../classch_1_1_process.html#a4683fb53999bbc1cbefb5637a4843e55',1,'ch::Process::rate()']]], + ['rebin_313',['Rebin',['../classch_1_1_auto_rebin.html#af9525ed197d8b5742695c729645ea4a2',1,'ch::AutoRebin']]], + ['rebinhist_314',['RebinHist',['../namespacech.html#a2cbcfd049543bfe9f63958bc671deeae',1,'ch']]], + ['removegroup_315',['RemoveGroup',['../classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810',1,'ch::CombineHarvester']]], + ['renameautomcstatsbin_316',['RenameAutoMCStatsBin',['../classch_1_1_combine_harvester.html#a44d791bc4812feb68729e7660fd3e5b3',1,'ch::CombineHarvester']]], + ['renamegroup_317',['RenameGroup',['../classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9',1,'ch::CombineHarvester']]], + ['renameparameter_318',['RenameParameter',['../classch_1_1_combine_harvester.html#a2825b9eeec47f7b23f93520bf615b581',1,'ch::CombineHarvester']]], + ['renameparinws_319',['renameParInWs',['../classch_1_1_combine_harvester.html#a45dc5b119b4c0618c0f3e614d48ae2d6',1,'ch::CombineHarvester']]], + ['renamesystematic_320',['RenameSystematic',['../classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9',1,'ch::CombineHarvester']]], + ['reproducerun1httdatacards_2emd_321',['ReproduceRun1HTTDatacards.md',['../_reproduce_run1_h_t_t_datacards_8md.html',1,'']]], + ['reproducing_20run_201_20h_2d_3etautau_20results_322',['Reproducing Run 1 H->tautau results',['../introrun1_h_t_t.html',1,'']]], + ['restorebinning_323',['RestoreBinning',['../namespacech.html#a23cd9444931a49de080638458f722501',1,'ch']]], + ['reversebins_324',['ReverseBins',['../_post_fit_shapes_from_workspace_8cpp.html#a48acb519f981bec18bc41e658431176d',1,'PostFitShapesFromWorkspace.cpp']]], + ['rezerotgraph_325',['ReZeroTGraph',['../_plotting_8h.html#af2524f9f02ac66a16164c87bfc149628',1,'Plotting.h']]], + ['roomorphingpdf_326',['RooMorphingPdf',['../intro_morph.html',1,'']]], + ['roomorphingpdf_2emd_327',['RooMorphingPdf.md',['../_roo_morphing_pdf_8md.html',1,'']]], + ['run_328',['Run',['../classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60',1,'ch::CMSHistFuncFactory::Run(CombineHarvester &cb, RooWorkspace &ws)'],['../classch_1_1_c_m_s_hist_func_factory.html#a4e057f77b7fcdde3e98967bb5632717e',1,'ch::CMSHistFuncFactory::Run(CombineHarvester &cb, RooWorkspace &ws, std::map< std::string, std::string > process_vs_norm_postfix_map)']]] ]; diff --git a/search/classes_0.html b/search/classes_0.html index d585e6a9bfd..af8159ee61c 100644 --- a/search/classes_0.html +++ b/search/classes_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_0.js b/search/classes_0.js index e683c82a20e..ca748d5003f 100644 --- a/search/classes_0.js +++ b/search/classes_0.js @@ -1,5 +1,5 @@ var searchData= [ - ['analysis_525',['analysis',['../structch_1_1syst_1_1analysis.html',1,'ch::syst']]], - ['autorebin_526',['AutoRebin',['../classch_1_1_auto_rebin.html',1,'ch']]] + ['analysis_481',['analysis',['../structch_1_1syst_1_1analysis.html',1,'ch::syst']]], + ['autorebin_482',['AutoRebin',['../classch_1_1_auto_rebin.html',1,'ch']]] ]; diff --git a/search/classes_1.html b/search/classes_1.html index baeb182b5dd..576e9168944 100644 --- a/search/classes_1.html +++ b/search/classes_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_1.js b/search/classes_1.js index 8187b37e24d..b6887ac673e 100644 --- a/search/classes_1.js +++ b/search/classes_1.js @@ -1,7 +1,7 @@ var searchData= [ - ['bin_527',['bin',['../structch_1_1syst_1_1bin.html',1,'ch::syst']]], - ['bin_5fid_528',['bin_id',['../classch_1_1syst_1_1bin__id.html',1,'ch::syst']]], - ['binbybinfactory_529',['BinByBinFactory',['../classch_1_1_bin_by_bin_factory.html',1,'ch']]], - ['bkginfo_530',['BkgInfo',['../struct_bkg_info.html',1,'']]] + ['bin_483',['bin',['../structch_1_1syst_1_1bin.html',1,'ch::syst']]], + ['bin_5fid_484',['bin_id',['../classch_1_1syst_1_1bin__id.html',1,'ch::syst']]], + ['binbybinfactory_485',['BinByBinFactory',['../classch_1_1_bin_by_bin_factory.html',1,'ch']]], + ['bkginfo_486',['BkgInfo',['../struct_bkg_info.html',1,'']]] ]; diff --git a/search/classes_2.html b/search/classes_2.html index d2672790c57..956405e5a06 100644 --- a/search/classes_2.html +++ b/search/classes_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_2.js b/search/classes_2.js index f6dd7bc0155..38253713962 100644 --- a/search/classes_2.js +++ b/search/classes_2.js @@ -1,8 +1,8 @@ var searchData= [ - ['cardwriter_531',['CardWriter',['../classch_1_1_card_writer.html',1,'ch']]], - ['channel_532',['channel',['../structch_1_1syst_1_1channel.html',1,'ch::syst']]], - ['cmshistfuncfactory_533',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html',1,'ch']]], - ['colinfo_534',['ColInfo',['../struct_col_info.html',1,'']]], - ['combineharvester_535',['CombineHarvester',['../classch_1_1_combine_harvester.html',1,'ch']]] + ['cardwriter_487',['CardWriter',['../classch_1_1_card_writer.html',1,'ch']]], + ['channel_488',['channel',['../structch_1_1syst_1_1channel.html',1,'ch::syst']]], + ['cmshistfuncfactory_489',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html',1,'ch']]], + ['colinfo_490',['ColInfo',['../struct_col_info.html',1,'']]], + ['combineharvester_491',['CombineHarvester',['../classch_1_1_combine_harvester.html',1,'ch']]] ]; diff --git a/search/classes_3.html b/search/classes_3.html index 8a5cbe1711e..d33343bc119 100644 --- a/search/classes_3.html +++ b/search/classes_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_3.js b/search/classes_3.js index 0aded0cdcc1..ad26719ace5 100644 --- a/search/classes_3.js +++ b/search/classes_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['era_536',['era',['../structch_1_1syst_1_1era.html',1,'ch::syst']]] + ['era_492',['era',['../structch_1_1syst_1_1era.html',1,'ch::syst']]] ]; diff --git a/search/classes_4.html b/search/classes_4.html index 300b9abacf1..8430b07fe30 100644 --- a/search/classes_4.html +++ b/search/classes_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_4.js b/search/classes_4.js index f0da3f2ddf8..dde1aaafe12 100644 --- a/search/classes_4.js +++ b/search/classes_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['fntimer_537',['FnTimer',['../classch_1_1_fn_timer.html',1,'ch']]] + ['fntimer_493',['FnTimer',['../classch_1_1_fn_timer.html',1,'ch']]] ]; diff --git a/search/classes_5.html b/search/classes_5.html index e7afb2c3a78..c2f1b767bc5 100644 --- a/search/classes_5.html +++ b/search/classes_5.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_5.js b/search/classes_5.js index ebde8968876..3c07e38d158 100644 --- a/search/classes_5.js +++ b/search/classes_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['histmapping_538',['HistMapping',['../structch_1_1_hist_mapping.html',1,'ch']]] + ['histmapping_494',['HistMapping',['../structch_1_1_hist_mapping.html',1,'ch']]] ]; diff --git a/search/classes_6.html b/search/classes_6.html index f397fd5a597..e39847ce8f5 100644 --- a/search/classes_6.html +++ b/search/classes_6.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_6.js b/search/classes_6.js index 770c66dbee5..6160bab04b1 100644 --- a/search/classes_6.js +++ b/search/classes_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['mass_539',['mass',['../structch_1_1syst_1_1mass.html',1,'ch::syst']]] + ['mass_495',['mass',['../structch_1_1syst_1_1mass.html',1,'ch::syst']]] ]; diff --git a/search/classes_7.html b/search/classes_7.html index 6453cb7fec9..a2c4d1a3975 100644 --- a/search/classes_7.html +++ b/search/classes_7.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_7.js b/search/classes_7.js index bec9d594bff..f20a3223462 100644 --- a/search/classes_7.js +++ b/search/classes_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['object_540',['Object',['../classch_1_1_object.html',1,'ch']]], - ['observation_541',['Observation',['../classch_1_1_observation.html',1,'ch']]] + ['object_496',['Object',['../classch_1_1_object.html',1,'ch']]], + ['observation_497',['Observation',['../classch_1_1_observation.html',1,'ch']]] ]; diff --git a/search/classes_8.html b/search/classes_8.html index f2f78e9fc12..17003e4800e 100644 --- a/search/classes_8.html +++ b/search/classes_8.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_8.js b/search/classes_8.js index e6099844e51..3d5ad494063 100644 --- a/search/classes_8.js +++ b/search/classes_8.js @@ -1,5 +1,6 @@ var searchData= [ - ['parameter_542',['Parameter',['../classch_1_1_parameter.html',1,'ch']]], - ['process_543',['process',['../structch_1_1syst_1_1process.html',1,'ch::syst::process'],['../classch_1_1_process.html',1,'ch::Process']]] + ['parameter_498',['Parameter',['../classch_1_1_parameter.html',1,'ch']]], + ['process_499',['Process',['../classch_1_1_process.html',1,'ch']]], + ['process_500',['process',['../structch_1_1syst_1_1process.html',1,'ch::syst']]] ]; diff --git a/search/classes_9.html b/search/classes_9.html index e4e148f0332..b8afa8cba8a 100644 --- a/search/classes_9.html +++ b/search/classes_9.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_9.js b/search/classes_9.js index 1c9ce14b087..5b63167a273 100644 --- a/search/classes_9.js +++ b/search/classes_9.js @@ -1,8 +1,8 @@ var searchData= [ - ['soverbinfo_544',['SOverBInfo',['../structch_1_1_s_over_b_info.html',1,'ch']]], - ['systematic_545',['Systematic',['../classch_1_1_systematic.html',1,'ch']]], - ['systmap_546',['SystMap',['../classch_1_1syst_1_1_syst_map.html',1,'ch::syst']]], - ['systmapasymm_547',['SystMapAsymm',['../classch_1_1syst_1_1_syst_map_asymm.html',1,'ch::syst']]], - ['systmapfunc_548',['SystMapFunc',['../classch_1_1syst_1_1_syst_map_func.html',1,'ch::syst']]] + ['soverbinfo_501',['SOverBInfo',['../structch_1_1_s_over_b_info.html',1,'ch']]], + ['systematic_502',['Systematic',['../classch_1_1_systematic.html',1,'ch']]], + ['systmap_503',['SystMap',['../classch_1_1syst_1_1_syst_map.html',1,'ch::syst']]], + ['systmapasymm_504',['SystMapAsymm',['../classch_1_1syst_1_1_syst_map_asymm.html',1,'ch::syst']]], + ['systmapfunc_505',['SystMapFunc',['../classch_1_1syst_1_1_syst_map_func.html',1,'ch::syst']]] ]; diff --git a/search/classes_a.html b/search/classes_a.html index 157ebcb7432..6788af27087 100644 --- a/search/classes_a.html +++ b/search/classes_a.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/classes_a.js b/search/classes_a.js index 41ff8d07a8b..c54f9c78f4a 100644 --- a/search/classes_a.js +++ b/search/classes_a.js @@ -1,7 +1,7 @@ var searchData= [ - ['token_549',['Token',['../classch_1_1_fn_timer_1_1_token.html',1,'ch::FnTimer']]], - ['tupleprinter_550',['TuplePrinter',['../structch_1_1tupleprint_1_1_tuple_printer.html',1,'ch::tupleprint']]], - ['tupleprinter_3c_20tuple_2c_200_20_3e_551',['TuplePrinter< Tuple, 0 >',['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html',1,'ch::tupleprint']]], - ['tupleprinter_3c_20tuple_2c_201_20_3e_552',['TuplePrinter< Tuple, 1 >',['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html',1,'ch::tupleprint']]] + ['token_506',['Token',['../classch_1_1_fn_timer_1_1_token.html',1,'ch::FnTimer']]], + ['tupleprinter_507',['TuplePrinter',['../structch_1_1tupleprint_1_1_tuple_printer.html',1,'ch::tupleprint']]], + ['tupleprinter_3c_20tuple_2c_200_20_3e_508',['TuplePrinter< Tuple, 0 >',['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html',1,'ch::tupleprint']]], + ['tupleprinter_3c_20tuple_2c_201_20_3e_509',['TuplePrinter< Tuple, 1 >',['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html',1,'ch::tupleprint']]] ]; diff --git a/search/close.png b/search/close.png deleted file mode 100644 index 9342d3dfeea7b7c4ee610987e717804b5a42ceb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 00000000000..a933eea1a26 --- /dev/null +++ b/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/search/defines_0.html b/search/defines_0.html index 8fb07b8c87e..15cc3de38d3 100644 --- a/search/defines_0.html +++ b/search/defines_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/defines_0.js b/search/defines_0.js index c32b6e589d8..afa9d04c362 100644 --- a/search/defines_0.js +++ b/search/defines_0.js @@ -1,6 +1,6 @@ var searchData= [ - ['fnerror_1058',['FNERROR',['../_logging_8h.html#ab140ae8826e1f99c5aa0e920a9c13112',1,'Logging.h']]], - ['fnlog_1059',['FNLOG',['../_logging_8h.html#ada13f286e68b5dcf51c75365e99c7a68',1,'Logging.h']]], - ['fnlogc_1060',['FNLOGC',['../_logging_8h.html#a3eb848e20af411db5ba7f1d4f082fed0',1,'Logging.h']]] + ['fnerror_968',['FNERROR',['../_logging_8h.html#ab140ae8826e1f99c5aa0e920a9c13112',1,'Logging.h']]], + ['fnlog_969',['FNLOG',['../_logging_8h.html#ada13f286e68b5dcf51c75365e99c7a68',1,'Logging.h']]], + ['fnlogc_970',['FNLOGC',['../_logging_8h.html#a3eb848e20af411db5ba7f1d4f082fed0',1,'Logging.h']]] ]; diff --git a/search/defines_1.html b/search/defines_1.html index 2858dbe3932..c49009c71aa 100644 --- a/search/defines_1.html +++ b/search/defines_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/defines_1.js b/search/defines_1.js index 23fed216cb1..834502390f3 100644 --- a/search/defines_1.js +++ b/search/defines_1.js @@ -1,5 +1,5 @@ var searchData= [ - ['launch_5ffunction_5ftimer_1061',['LAUNCH_FUNCTION_TIMER',['../_logging_8h.html#a877d7811b666826b5f61749fab827a31',1,'Logging.h']]], - ['logline_1062',['LOGLINE',['../_logging_8h.html#a7c001e91758abea6ce1e5609a873c852',1,'Logging.h']]] + ['launch_5ffunction_5ftimer_971',['LAUNCH_FUNCTION_TIMER',['../_logging_8h.html#a877d7811b666826b5f61749fab827a31',1,'Logging.h']]], + ['logline_972',['LOGLINE',['../_logging_8h.html#a7c001e91758abea6ce1e5609a873c852',1,'Logging.h']]] ]; diff --git a/search/files_0.html b/search/files_0.html index de151d53810..9498842a626 100644 --- a/search/files_0.html +++ b/search/files_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_0.js b/search/files_0.js index ab19c72ba2c..4352928a712 100644 --- a/search/files_0.js +++ b/search/files_0.js @@ -1,7 +1,7 @@ var searchData= [ - ['algorithm_2eh_559',['Algorithm.h',['../_algorithm_8h.html',1,'']]], - ['autorebin_2ecc_560',['AutoRebin.cc',['../_auto_rebin_8cc.html',1,'']]], - ['autorebin_2eh_561',['AutoRebin.h',['../_auto_rebin_8h.html',1,'']]], - ['azhsystematics_2ecc_562',['AZhSystematics.cc',['../_a_zh_systematics_8cc.html',1,'']]] + ['algorithm_2eh_515',['Algorithm.h',['../_algorithm_8h.html',1,'']]], + ['autorebin_2ecc_516',['AutoRebin.cc',['../_auto_rebin_8cc.html',1,'']]], + ['autorebin_2eh_517',['AutoRebin.h',['../_auto_rebin_8h.html',1,'']]], + ['azhsystematics_2ecc_518',['AZhSystematics.cc',['../_a_zh_systematics_8cc.html',1,'']]] ]; diff --git a/search/files_1.html b/search/files_1.html index 73e2c8bcfb1..7050ef48aae 100644 --- a/search/files_1.html +++ b/search/files_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_1.js b/search/files_1.js index 8e044bf0fd1..85b6fd95973 100644 --- a/search/files_1.js +++ b/search/files_1.js @@ -1,7 +1,7 @@ var searchData= [ - ['binbybin_2ecc_563',['BinByBin.cc',['../_bin_by_bin_8cc.html',1,'']]], - ['binbybin_2eh_564',['BinByBin.h',['../_bin_by_bin_8h.html',1,'']]], - ['bsm_2dmodelindependent_2dlimits_2dhhhazh_2emd_565',['BSM-ModelIndependent-Limits-HhhAZh.md',['../_b_s_m-_model_independent-_limits-_hhh_a_zh_8md.html',1,'']]], - ['bsm_2dmodelindependent_2dlimits_2dmssmhtt_2emd_566',['BSM-ModelIndependent-Limits-MSSMHTT.md',['../_b_s_m-_model_independent-_limits-_m_s_s_m_h_t_t_8md.html',1,'']]] + ['binbybin_2ecc_519',['BinByBin.cc',['../_bin_by_bin_8cc.html',1,'']]], + ['binbybin_2eh_520',['BinByBin.h',['../_bin_by_bin_8h.html',1,'']]], + ['bsm_2dmodelindependent_2dlimits_2dhhhazh_2emd_521',['BSM-ModelIndependent-Limits-HhhAZh.md',['../_b_s_m-_model_independent-_limits-_hhh_a_zh_8md.html',1,'']]], + ['bsm_2dmodelindependent_2dlimits_2dmssmhtt_2emd_522',['BSM-ModelIndependent-Limits-MSSMHTT.md',['../_b_s_m-_model_independent-_limits-_m_s_s_m_h_t_t_8md.html',1,'']]] ]; diff --git a/search/files_2.html b/search/files_2.html index 24cb5419ac8..497cdf5c76b 100644 --- a/search/files_2.html +++ b/search/files_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_2.js b/search/files_2.js index dba7e1baff5..d783dceefa3 100644 --- a/search/files_2.js +++ b/search/files_2.js @@ -1,17 +1,17 @@ var searchData= [ - ['cardwriter_2ecc_567',['CardWriter.cc',['../_card_writer_8cc.html',1,'']]], - ['cardwriter_2eh_568',['CardWriter.h',['../_card_writer_8h.html',1,'']]], - ['chargedhiggs_2emd_569',['ChargedHiggs.md',['../_charged_higgs_8md.html',1,'']]], - ['classes_2eh_570',['classes.h',['../_combine_tools_2src_2classes_8h.html',1,'(Global Namespace)'],['../_combine_pdfs_2src_2classes_8h.html',1,'(Global Namespace)']]], - ['cmshistfuncfactory_2ecc_571',['CMSHistFuncFactory.cc',['../_c_m_s_hist_func_factory_8cc.html',1,'']]], - ['cmshistfuncfactory_2eh_572',['CMSHistFuncFactory.h',['../_c_m_s_hist_func_factory_8h.html',1,'']]], - ['combineharvester_2ecc_573',['CombineHarvester.cc',['../_combine_harvester_8cc.html',1,'']]], - ['combineharvester_2eh_574',['CombineHarvester.h',['../_combine_harvester_8h.html',1,'']]], - ['combineharvester_5fcreation_2ecc_575',['CombineHarvester_Creation.cc',['../_combine_harvester___creation_8cc.html',1,'']]], - ['combineharvester_5fdatacards_2ecc_576',['CombineHarvester_Datacards.cc',['../_combine_harvester___datacards_8cc.html',1,'']]], - ['combineharvester_5fevaluate_2ecc_577',['CombineHarvester_Evaluate.cc',['../_combine_harvester___evaluate_8cc.html',1,'']]], - ['combineharvester_5ffilters_2ecc_578',['CombineHarvester_Filters.cc',['../_combine_harvester___filters_8cc.html',1,'']]], - ['copytools_2ecc_579',['CopyTools.cc',['../_copy_tools_8cc.html',1,'']]], - ['copytools_2eh_580',['CopyTools.h',['../_copy_tools_8h.html',1,'']]] + ['cardwriter_2ecc_523',['CardWriter.cc',['../_card_writer_8cc.html',1,'']]], + ['cardwriter_2eh_524',['CardWriter.h',['../_card_writer_8h.html',1,'']]], + ['chargedhiggs_2emd_525',['ChargedHiggs.md',['../_charged_higgs_8md.html',1,'']]], + ['classes_2eh_526',['classes.h',['../_combine_tools_2src_2classes_8h.html',1,'(Global Namespace)'],['../_combine_pdfs_2src_2classes_8h.html',1,'(Global Namespace)']]], + ['cmshistfuncfactory_2ecc_527',['CMSHistFuncFactory.cc',['../_c_m_s_hist_func_factory_8cc.html',1,'']]], + ['cmshistfuncfactory_2eh_528',['CMSHistFuncFactory.h',['../_c_m_s_hist_func_factory_8h.html',1,'']]], + ['combineharvester_2ecc_529',['CombineHarvester.cc',['../_combine_harvester_8cc.html',1,'']]], + ['combineharvester_2eh_530',['CombineHarvester.h',['../_combine_harvester_8h.html',1,'']]], + ['combineharvester_5fcreation_2ecc_531',['CombineHarvester_Creation.cc',['../_combine_harvester___creation_8cc.html',1,'']]], + ['combineharvester_5fdatacards_2ecc_532',['CombineHarvester_Datacards.cc',['../_combine_harvester___datacards_8cc.html',1,'']]], + ['combineharvester_5fevaluate_2ecc_533',['CombineHarvester_Evaluate.cc',['../_combine_harvester___evaluate_8cc.html',1,'']]], + ['combineharvester_5ffilters_2ecc_534',['CombineHarvester_Filters.cc',['../_combine_harvester___filters_8cc.html',1,'']]], + ['copytools_2ecc_535',['CopyTools.cc',['../_copy_tools_8cc.html',1,'']]], + ['copytools_2eh_536',['CopyTools.h',['../_copy_tools_8h.html',1,'']]] ]; diff --git a/search/files_3.html b/search/files_3.html index ef0b0ff727b..1ba106b2d5d 100644 --- a/search/files_3.html +++ b/search/files_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_3.js b/search/files_3.js index 4441a61400b..b200cd8d59b 100644 --- a/search/files_3.js +++ b/search/files_3.js @@ -1,6 +1,6 @@ var searchData= [ - ['example1_2emd_581',['Example1.md',['../_example1_8md.html',1,'']]], - ['example2_2emd_582',['Example2.md',['../_example2_8md.html',1,'']]], - ['example3_2emd_583',['Example3.md',['../_example3_8md.html',1,'']]] + ['example1_2emd_537',['Example1.md',['../_example1_8md.html',1,'']]], + ['example2_2emd_538',['Example2.md',['../_example2_8md.html',1,'']]], + ['example3_2emd_539',['Example3.md',['../_example3_8md.html',1,'']]] ]; diff --git a/search/files_4.html b/search/files_4.html index 324abe4f54e..753b7b10956 100644 --- a/search/files_4.html +++ b/search/files_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_4.js b/search/files_4.js index 981f5ded441..b6df3edc7df 100644 --- a/search/files_4.js +++ b/search/files_4.js @@ -1,11 +1,11 @@ var searchData= [ - ['hhhsystematics_2ecc_584',['HhhSystematics.cc',['../_hhh_systematics_8cc.html',1,'']]], - ['histmapping_2ecc_585',['HistMapping.cc',['../_hist_mapping_8cc.html',1,'']]], - ['histmapping_2eh_586',['HistMapping.h',['../_hist_mapping_8h.html',1,'']]], - ['httsystematics_2eh_587',['HttSystematics.h',['../_htt_systematics_8h.html',1,'']]], - ['httsystematics_5fmssmlegacy_2ecc_588',['HttSystematics_MSSMLegacy.cc',['../_htt_systematics___m_s_s_m_legacy_8cc.html',1,'']]], - ['httsystematics_5fmssmupdate_2ecc_589',['HttSystematics_MSSMUpdate.cc',['../_htt_systematics___m_s_s_m_update_8cc.html',1,'']]], - ['httsystematics_5fsmlegacy_2ecc_590',['HttSystematics_SMLegacy.cc',['../_htt_systematics___s_m_legacy_8cc.html',1,'']]], - ['hybridnewgrid_2emd_591',['HybridNewGrid.md',['../_hybrid_new_grid_8md.html',1,'']]] + ['hhhsystematics_2ecc_540',['HhhSystematics.cc',['../_hhh_systematics_8cc.html',1,'']]], + ['histmapping_2ecc_541',['HistMapping.cc',['../_hist_mapping_8cc.html',1,'']]], + ['histmapping_2eh_542',['HistMapping.h',['../_hist_mapping_8h.html',1,'']]], + ['httsystematics_2eh_543',['HttSystematics.h',['../_htt_systematics_8h.html',1,'']]], + ['httsystematics_5fmssmlegacy_2ecc_544',['HttSystematics_MSSMLegacy.cc',['../_htt_systematics___m_s_s_m_legacy_8cc.html',1,'']]], + ['httsystematics_5fmssmupdate_2ecc_545',['HttSystematics_MSSMUpdate.cc',['../_htt_systematics___m_s_s_m_update_8cc.html',1,'']]], + ['httsystematics_5fsmlegacy_2ecc_546',['HttSystematics_SMLegacy.cc',['../_htt_systematics___s_m_legacy_8cc.html',1,'']]], + ['hybridnewgrid_2emd_547',['HybridNewGrid.md',['../_hybrid_new_grid_8md.html',1,'']]] ]; diff --git a/search/files_5.html b/search/files_5.html index 7d6881677b4..7b6affd7f1e 100644 --- a/search/files_5.html +++ b/search/files_5.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_5.js b/search/files_5.js index 6f519e4c292..b5b76892e27 100644 --- a/search/files_5.js +++ b/search/files_5.js @@ -1,5 +1,5 @@ var searchData= [ - ['jsontools_2ecc_592',['JsonTools.cc',['../_json_tools_8cc.html',1,'']]], - ['jsontools_2eh_593',['JsonTools.h',['../_json_tools_8h.html',1,'']]] + ['jsontools_2ecc_548',['JsonTools.cc',['../_json_tools_8cc.html',1,'']]], + ['jsontools_2eh_549',['JsonTools.h',['../_json_tools_8h.html',1,'']]] ]; diff --git a/search/files_6.html b/search/files_6.html index cc06fb25ebc..802ebf715b0 100644 --- a/search/files_6.html +++ b/search/files_6.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_6.js b/search/files_6.js index a07ddd421e3..ef82e5ab4cd 100644 --- a/search/files_6.js +++ b/search/files_6.js @@ -1,6 +1,6 @@ var searchData= [ - ['limits_2emd_594',['Limits.md',['../_limits_8md.html',1,'']]], - ['logging_2ecc_595',['Logging.cc',['../_logging_8cc.html',1,'']]], - ['logging_2eh_596',['Logging.h',['../_logging_8h.html',1,'']]] + ['limits_2emd_550',['Limits.md',['../_limits_8md.html',1,'']]], + ['logging_2ecc_551',['Logging.cc',['../_logging_8cc.html',1,'']]], + ['logging_2eh_552',['Logging.h',['../_logging_8h.html',1,'']]] ]; diff --git a/search/files_7.html b/search/files_7.html index 10c2046e3cd..365e6484f53 100644 --- a/search/files_7.html +++ b/search/files_7.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_7.js b/search/files_7.js index cb67cf799cf..c9e8f7cebcf 100644 --- a/search/files_7.js +++ b/search/files_7.js @@ -1,9 +1,9 @@ var searchData= [ - ['ma_2dtanb_2dlimits_2emd_597',['mA-tanb-Limits.md',['../m_a-tanb-_limits_8md.html',1,'']]], - ['main_2emd_598',['Main.md',['../_main_8md.html',1,'']]], - ['makeunique_2eh_599',['MakeUnique.h',['../_make_unique_8h.html',1,'']]], - ['morphfunctions_2ecc_600',['MorphFunctions.cc',['../_morph_functions_8cc.html',1,'']]], - ['morphfunctions_2eh_601',['MorphFunctions.h',['../_morph_functions_8h.html',1,'']]], - ['mssmyieldtable_2ecpp_602',['MSSMYieldTable.cpp',['../_m_s_s_m_yield_table_8cpp.html',1,'']]] + ['ma_2dtanb_2dlimits_2emd_553',['mA-tanb-Limits.md',['../m_a-tanb-_limits_8md.html',1,'']]], + ['main_2emd_554',['Main.md',['../_main_8md.html',1,'']]], + ['makeunique_2eh_555',['MakeUnique.h',['../_make_unique_8h.html',1,'']]], + ['morphfunctions_2ecc_556',['MorphFunctions.cc',['../_morph_functions_8cc.html',1,'']]], + ['morphfunctions_2eh_557',['MorphFunctions.h',['../_morph_functions_8h.html',1,'']]], + ['mssmyieldtable_2ecpp_558',['MSSMYieldTable.cpp',['../_m_s_s_m_yield_table_8cpp.html',1,'']]] ]; diff --git a/search/files_8.html b/search/files_8.html index 6ee57c511ba..3df0f2faeb6 100644 --- a/search/files_8.html +++ b/search/files_8.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_8.js b/search/files_8.js index 468e7e2da8a..b26d595d34f 100644 --- a/search/files_8.js +++ b/search/files_8.js @@ -1,7 +1,7 @@ var searchData= [ - ['object_2ecc_603',['Object.cc',['../_object_8cc.html',1,'']]], - ['object_2eh_604',['Object.h',['../_object_8h.html',1,'']]], - ['observation_2ecc_605',['Observation.cc',['../_observation_8cc.html',1,'']]], - ['observation_2eh_606',['Observation.h',['../_observation_8h.html',1,'']]] + ['object_2ecc_559',['Object.cc',['../_object_8cc.html',1,'']]], + ['object_2eh_560',['Object.h',['../_object_8h.html',1,'']]], + ['observation_2ecc_561',['Observation.cc',['../_observation_8cc.html',1,'']]], + ['observation_2eh_562',['Observation.h',['../_observation_8h.html',1,'']]] ]; diff --git a/search/files_9.html b/search/files_9.html index 5da3443a728..52f8b6c0725 100644 --- a/search/files_9.html +++ b/search/files_9.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_9.js b/search/files_9.js index d45b1369b66..9cf857fd58d 100644 --- a/search/files_9.js +++ b/search/files_9.js @@ -1,16 +1,16 @@ var searchData= [ - ['parameter_2ecc_607',['Parameter.cc',['../_parameter_8cc.html',1,'']]], - ['parameter_2eh_608',['Parameter.h',['../_parameter_8h.html',1,'']]], - ['parsecombineworkspace_2ecc_609',['ParseCombineWorkspace.cc',['../_parse_combine_workspace_8cc.html',1,'']]], - ['parsecombineworkspace_2eh_610',['ParseCombineWorkspace.h',['../_parse_combine_workspace_8h.html',1,'']]], - ['plotting_2eh_611',['Plotting.h',['../_plotting_8h.html',1,'']]], - ['plotting_2epy_612',['plotting.py',['../plotting_8py.html',1,'']]], - ['plotting_5fcontours_2eh_613',['Plotting_Contours.h',['../_plotting___contours_8h.html',1,'']]], - ['plotting_5fstyle_2eh_614',['Plotting_Style.h',['../_plotting___style_8h.html',1,'']]], - ['postfitshapesfromworkspace_2ecpp_615',['PostFitShapesFromWorkspace.cpp',['../_post_fit_shapes_from_workspace_8cpp.html',1,'']]], - ['postfitshapesfromworkspace_2emd_616',['PostFitShapesFromWorkspace.md',['../_post_fit_shapes_from_workspace_8md.html',1,'']]], - ['process_2ecc_617',['Process.cc',['../_process_8cc.html',1,'']]], - ['process_2eh_618',['Process.h',['../_process_8h.html',1,'']]], - ['pythoninterface_2emd_619',['PythonInterface.md',['../_python_interface_8md.html',1,'']]] + ['parameter_2ecc_563',['Parameter.cc',['../_parameter_8cc.html',1,'']]], + ['parameter_2eh_564',['Parameter.h',['../_parameter_8h.html',1,'']]], + ['parsecombineworkspace_2ecc_565',['ParseCombineWorkspace.cc',['../_parse_combine_workspace_8cc.html',1,'']]], + ['parsecombineworkspace_2eh_566',['ParseCombineWorkspace.h',['../_parse_combine_workspace_8h.html',1,'']]], + ['plotting_2eh_567',['Plotting.h',['../_plotting_8h.html',1,'']]], + ['plotting_2epy_568',['plotting.py',['../plotting_8py.html',1,'']]], + ['plotting_5fcontours_2eh_569',['Plotting_Contours.h',['../_plotting___contours_8h.html',1,'']]], + ['plotting_5fstyle_2eh_570',['Plotting_Style.h',['../_plotting___style_8h.html',1,'']]], + ['postfitshapesfromworkspace_2ecpp_571',['PostFitShapesFromWorkspace.cpp',['../_post_fit_shapes_from_workspace_8cpp.html',1,'']]], + ['postfitshapesfromworkspace_2emd_572',['PostFitShapesFromWorkspace.md',['../_post_fit_shapes_from_workspace_8md.html',1,'']]], + ['process_2ecc_573',['Process.cc',['../_process_8cc.html',1,'']]], + ['process_2eh_574',['Process.h',['../_process_8h.html',1,'']]], + ['pythoninterface_2emd_575',['PythonInterface.md',['../_python_interface_8md.html',1,'']]] ]; diff --git a/search/files_a.html b/search/files_a.html index 118985d6253..11d4c117bdc 100644 --- a/search/files_a.html +++ b/search/files_a.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_a.js b/search/files_a.js index 3a0469a4e1f..37e1fcff56b 100644 --- a/search/files_a.js +++ b/search/files_a.js @@ -1,5 +1,5 @@ var searchData= [ - ['reproducerun1httdatacards_2emd_620',['ReproduceRun1HTTDatacards.md',['../_reproduce_run1_h_t_t_datacards_8md.html',1,'']]], - ['roomorphingpdf_2emd_621',['RooMorphingPdf.md',['../_roo_morphing_pdf_8md.html',1,'']]] + ['reproducerun1httdatacards_2emd_576',['ReproduceRun1HTTDatacards.md',['../_reproduce_run1_h_t_t_datacards_8md.html',1,'']]], + ['roomorphingpdf_2emd_577',['RooMorphingPdf.md',['../_roo_morphing_pdf_8md.html',1,'']]] ]; diff --git a/search/files_b.html b/search/files_b.html index 94b7254436a..9fc83436a38 100644 --- a/search/files_b.html +++ b/search/files_b.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_b.js b/search/files_b.js index e1d980691f8..98ded4ce2cd 100644 --- a/search/files_b.js +++ b/search/files_b.js @@ -1,9 +1,9 @@ var searchData= [ - ['smlegacyexample_2ecpp_622',['SMLegacyExample.cpp',['../_s_m_legacy_example_8cpp.html',1,'']]], - ['soverbtools_2ecc_623',['SOverBTools.cc',['../_s_over_b_tools_8cc.html',1,'']]], - ['soverbtools_2eh_624',['SOverBTools.h',['../_s_over_b_tools_8h.html',1,'']]], - ['systematic_2ecc_625',['Systematic.cc',['../_systematic_8cc.html',1,'']]], - ['systematic_2eh_626',['Systematic.h',['../_systematic_8h.html',1,'']]], - ['systematics_2eh_627',['Systematics.h',['../_systematics_8h.html',1,'']]] + ['smlegacyexample_2ecpp_578',['SMLegacyExample.cpp',['../_s_m_legacy_example_8cpp.html',1,'']]], + ['soverbtools_2ecc_579',['SOverBTools.cc',['../_s_over_b_tools_8cc.html',1,'']]], + ['soverbtools_2eh_580',['SOverBTools.h',['../_s_over_b_tools_8h.html',1,'']]], + ['systematic_2ecc_581',['Systematic.cc',['../_systematic_8cc.html',1,'']]], + ['systematic_2eh_582',['Systematic.h',['../_systematic_8h.html',1,'']]], + ['systematics_2eh_583',['Systematics.h',['../_systematics_8h.html',1,'']]] ]; diff --git a/search/files_c.html b/search/files_c.html index 8d175bc15c6..c266b4c2535 100644 --- a/search/files_c.html +++ b/search/files_c.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_c.js b/search/files_c.js index 4eb92620918..f91a71a84e9 100644 --- a/search/files_c.js +++ b/search/files_c.js @@ -1,5 +1,5 @@ var searchData= [ - ['tfileio_2ecc_628',['TFileIO.cc',['../_t_file_i_o_8cc.html',1,'']]], - ['tfileio_2eh_629',['TFileIO.h',['../_t_file_i_o_8h.html',1,'']]] + ['tfileio_2ecc_584',['TFileIO.cc',['../_t_file_i_o_8cc.html',1,'']]], + ['tfileio_2eh_585',['TFileIO.h',['../_t_file_i_o_8h.html',1,'']]] ]; diff --git a/search/files_d.html b/search/files_d.html index c5132dd347e..d2ca3c1ca20 100644 --- a/search/files_d.html +++ b/search/files_d.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_d.js b/search/files_d.js index b4e6c75cbc9..eb7307118f7 100644 --- a/search/files_d.js +++ b/search/files_d.js @@ -1,5 +1,5 @@ var searchData= [ - ['utilities_2ecc_630',['Utilities.cc',['../_utilities_8cc.html',1,'']]], - ['utilities_2eh_631',['Utilities.h',['../_utilities_8h.html',1,'']]] + ['utilities_2ecc_586',['Utilities.cc',['../_utilities_8cc.html',1,'']]], + ['utilities_2eh_587',['Utilities.h',['../_utilities_8h.html',1,'']]] ]; diff --git a/search/files_e.html b/search/files_e.html index 01ff2259d61..9df4116723b 100644 --- a/search/files_e.html +++ b/search/files_e.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/files_e.js b/search/files_e.js index d4b8c2dba1a..8d0d98de233 100644 --- a/search/files_e.js +++ b/search/files_e.js @@ -1,6 +1,6 @@ var searchData= [ - ['validationtools_2ecc_632',['ValidationTools.cc',['../_validation_tools_8cc.html',1,'']]], - ['validationtools_2eh_633',['ValidationTools.h',['../_validation_tools_8h.html',1,'']]], - ['validationtoolsnojson_2eh_634',['ValidationToolsNoJSON.h',['../_validation_tools_no_j_s_o_n_8h.html',1,'']]] + ['validationtools_2ecc_588',['ValidationTools.cc',['../_validation_tools_8cc.html',1,'']]], + ['validationtools_2eh_589',['ValidationTools.h',['../_validation_tools_8h.html',1,'']]], + ['validationtoolsnojson_2eh_590',['ValidationToolsNoJSON.h',['../_validation_tools_no_j_s_o_n_8h.html',1,'']]] ]; diff --git a/search/functions_0.html b/search/functions_0.html index 8a729f78c87..eb4c5014c40 100644 --- a/search/functions_0.html +++ b/search/functions_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_0.js b/search/functions_0.js index 9ae172e0268..64a3f3514d2 100644 --- a/search/functions_0.js +++ b/search/functions_0.js @@ -1,34 +1,34 @@ var searchData= [ - ['addbinbybin_635',['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_636',['AddDatacardLineAtEnd',['../classch_1_1_combine_harvester.html#a59b5a637f7f11c2ee77a9b07bc1deb02',1,'ch::CombineHarvester']]], - ['addextargvalue_637',['AddExtArgValue',['../classch_1_1_combine_harvester.html#ae94f5954e44697ce22d5516515c8627c',1,'ch::CombineHarvester']]], - ['addmssmsystematics_638',['AddMSSMSystematics',['../namespacech.html#aa94f943eeda46d951fd794b7532944ed',1,'ch::AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a597c0a29e463a96eb05f9df8cb9dfe90',1,'ch::AddMSSMSystematics(CombineHarvester &cb)']]], - ['addmssmupdatesystematics_5fem_639',['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_640',['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)']]], - ['addmssmupdatesystematics_5fmm_641',['AddMSSMUpdateSystematics_mm',['../namespacech.html#a2306f36ca615557c6e40a542eeac706c',1,'ch::AddMSSMUpdateSystematics_mm(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#af29ced9cc4bb7590f89223df727d1706',1,'ch::AddMSSMUpdateSystematics_mm(CombineHarvester &cb)']]], - ['addmssmupdatesystematics_5ftt_642',['AddMSSMUpdateSystematics_tt',['../namespacech.html#acc4147799e297d63fa1a9ca08559a111',1,'ch::AddMSSMUpdateSystematics_tt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#aca0068af8fbaa611e502aa5647ed2121',1,'ch::AddMSSMUpdateSystematics_tt(CombineHarvester &cb)']]], - ['addobservations_643',['AddObservations',['../classch_1_1_combine_harvester.html#a8d7ccde30bda35ec084f4e38b923ef23',1,'ch::CombineHarvester']]], - ['addprocesses_644',['AddProcesses',['../classch_1_1_combine_harvester.html#a1ecb940a59ea7a2039956a07882e9ccc',1,'ch::CombineHarvester']]], - ['addsyst_645',['AddSyst',['../classch_1_1_combine_harvester.html#aab26f47e06ee53fcf1aab5c0940e916f',1,'ch::CombineHarvester']]], - ['addsystematics_5fazh_646',['AddSystematics_AZh',['../namespacech.html#a7f9b08fd76f4940d92768574abe5df73',1,'ch::AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a7bf80bed7d84e3c82934fa939dc6e1e3',1,'ch::AddSystematics_AZh(CombineHarvester &cb)']]], - ['addsystematics_5fee_5fmm_647',['AddSystematics_ee_mm',['../namespacech.html#a4d79c4fca0a76cc62c91d580644c051c',1,'ch']]], - ['addsystematics_5fem_648',['AddSystematics_em',['../namespacech.html#afe8f3907b055d2d6c0bc8b2bb7f74a02',1,'ch']]], - ['addsystematics_5fet_5fmt_649',['AddSystematics_et_mt',['../namespacech.html#aac947603f4cc50f70e7a8765da3e13d1',1,'ch']]], - ['addsystematics_5fhhh_5fet_5fmt_650',['AddSystematics_hhh_et_mt',['../namespacech.html#a5e05f5018289301287533bc288e576bb',1,'ch::AddSystematics_hhh_et_mt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#adab895bcbcec0006d4def02d2e909206',1,'ch::AddSystematics_hhh_et_mt(CombineHarvester &cb)']]], - ['addsystematics_5fhhh_5ftt_651',['AddSystematics_hhh_tt',['../namespacech.html#ad7c22b70d392f9617ee6f1c27a622661',1,'ch::AddSystematics_hhh_tt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#add9281b32e8ff7ec2d8fd6de545b3b4f',1,'ch::AddSystematics_hhh_tt(CombineHarvester &cb)']]], - ['addsystematics_5ftt_652',['AddSystematics_tt',['../namespacech.html#ac1578f3e0a1da427e6750ba4cefd94b8',1,'ch']]], - ['addsystfromproc_653',['AddSystFromProc',['../classch_1_1_combine_harvester.html#a00bd4490f33ab0ae404fb46a8cbd9dfe',1,'ch::CombineHarvester']]], - ['addworkspace_654',['AddWorkspace',['../classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d',1,'ch::CombineHarvester']]], - ['all_5fattributes_655',['all_attributes',['../classch_1_1_object.html#af6956eda45da72f747aeee28fadfe4fe',1,'ch::Object']]], - ['analysis_656',['analysis',['../classch_1_1_combine_harvester.html#a672af065808c26e0795259876787c57f',1,'ch::CombineHarvester::analysis()'],['../classch_1_1_object.html#aa69ff36a99fa4cffbc908584b041a2c8',1,'ch::Object::analysis()']]], - ['analysis_5fset_657',['analysis_set',['../classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631',1,'ch::CombineHarvester']]], - ['any_5fof_658',['any_of',['../namespacech.html#a9ae81b01c3e51356f05c2734d4e7fd8d',1,'ch']]], - ['applygraphyoffset_659',['ApplyGraphYOffset',['../namespacepython_1_1plotting.html#adff090f8dc97c979fc8056e0844669c4',1,'python::plotting']]], - ['args_660',['Args',['../classch_1_1syst_1_1_syst_map.html#a452609011e0f85963821c7caf45f8b2b',1,'ch::syst::SystMap::Args()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a4c278563123e3a5f045dfb98cf33f8fc',1,'ch::syst::SystMapAsymm::Args()'],['../classch_1_1syst_1_1_syst_map_func.html#a04de0fc2c65b817a318d129e4f7615d4',1,'ch::syst::SystMapFunc::Args()']]], - ['asth1f_661',['AsTH1F',['../namespacech.html#af9b462e52384bf17acf24c57bee7a5d3',1,'ch']]], - ['asymm_662',['asymm',['../classch_1_1_systematic.html#a5764d6db4954b8aac554776c149d3201',1,'ch::Systematic']]], - ['attr_663',['attr',['../classch_1_1_combine_harvester.html#a634f83792bbce25a8ceed4621fbb6ca2',1,'ch::CombineHarvester']]], - ['attribute_664',['attribute',['../classch_1_1_object.html#a92bcd99a8c7a5e565d713387bbd954d2',1,'ch::Object']]], - ['autorebin_665',['AutoRebin',['../classch_1_1_auto_rebin.html#a9305a4b7d600e31a17ccc6606d488825',1,'ch::AutoRebin']]] + ['addbinbybin_591',['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)'],['../classch_1_1_bin_by_bin_factory.html#ab097f067dce0a722af70dd86bf1b5398',1,'ch::BinByBinFactory::AddBinByBin()']]], + ['adddatacardlineatend_592',['AddDatacardLineAtEnd',['../classch_1_1_combine_harvester.html#a59b5a637f7f11c2ee77a9b07bc1deb02',1,'ch::CombineHarvester']]], + ['addextargvalue_593',['AddExtArgValue',['../classch_1_1_combine_harvester.html#ae94f5954e44697ce22d5516515c8627c',1,'ch::CombineHarvester']]], + ['addmssmsystematics_594',['AddMSSMSystematics',['../namespacech.html#aa94f943eeda46d951fd794b7532944ed',1,'ch::AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a597c0a29e463a96eb05f9df8cb9dfe90',1,'ch::AddMSSMSystematics(CombineHarvester &cb)']]], + ['addmssmupdatesystematics_5fem_595',['AddMSSMUpdateSystematics_em',['../namespacech.html#acec5cdd79f370c7bee88f4de418c9423',1,'ch::AddMSSMUpdateSystematics_em(CombineHarvester &cb)'],['../namespacech.html#ae6eebbd180b87701e7724c3db9d6cd5a',1,'ch::AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)']]], + ['addmssmupdatesystematics_5fet_5fmt_596',['AddMSSMUpdateSystematics_et_mt',['../namespacech.html#a2718097dd3af197ac2ad9d728b70ddde',1,'ch::AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb)'],['../namespacech.html#a0d7482a8b0989a1b6b7fe1689c65b0e1',1,'ch::AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb, CombineHarvester src)']]], + ['addmssmupdatesystematics_5fmm_597',['AddMSSMUpdateSystematics_mm',['../namespacech.html#a2306f36ca615557c6e40a542eeac706c',1,'ch::AddMSSMUpdateSystematics_mm(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#af29ced9cc4bb7590f89223df727d1706',1,'ch::AddMSSMUpdateSystematics_mm(CombineHarvester &cb)']]], + ['addmssmupdatesystematics_5ftt_598',['AddMSSMUpdateSystematics_tt',['../namespacech.html#acc4147799e297d63fa1a9ca08559a111',1,'ch::AddMSSMUpdateSystematics_tt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#aca0068af8fbaa611e502aa5647ed2121',1,'ch::AddMSSMUpdateSystematics_tt(CombineHarvester &cb)']]], + ['addobservations_599',['AddObservations',['../classch_1_1_combine_harvester.html#a8d7ccde30bda35ec084f4e38b923ef23',1,'ch::CombineHarvester']]], + ['addprocesses_600',['AddProcesses',['../classch_1_1_combine_harvester.html#a1ecb940a59ea7a2039956a07882e9ccc',1,'ch::CombineHarvester']]], + ['addsyst_601',['AddSyst',['../classch_1_1_combine_harvester.html#aab26f47e06ee53fcf1aab5c0940e916f',1,'ch::CombineHarvester']]], + ['addsystematics_5fazh_602',['AddSystematics_AZh',['../namespacech.html#a7f9b08fd76f4940d92768574abe5df73',1,'ch::AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a7bf80bed7d84e3c82934fa939dc6e1e3',1,'ch::AddSystematics_AZh(CombineHarvester &cb)']]], + ['addsystematics_5fee_5fmm_603',['AddSystematics_ee_mm',['../namespacech.html#a4d79c4fca0a76cc62c91d580644c051c',1,'ch']]], + ['addsystematics_5fem_604',['AddSystematics_em',['../namespacech.html#afe8f3907b055d2d6c0bc8b2bb7f74a02',1,'ch']]], + ['addsystematics_5fet_5fmt_605',['AddSystematics_et_mt',['../namespacech.html#aac947603f4cc50f70e7a8765da3e13d1',1,'ch']]], + ['addsystematics_5fhhh_5fet_5fmt_606',['AddSystematics_hhh_et_mt',['../namespacech.html#a5e05f5018289301287533bc288e576bb',1,'ch::AddSystematics_hhh_et_mt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#adab895bcbcec0006d4def02d2e909206',1,'ch::AddSystematics_hhh_et_mt(CombineHarvester &cb)']]], + ['addsystematics_5fhhh_5ftt_607',['AddSystematics_hhh_tt',['../namespacech.html#ad7c22b70d392f9617ee6f1c27a622661',1,'ch::AddSystematics_hhh_tt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#add9281b32e8ff7ec2d8fd6de545b3b4f',1,'ch::AddSystematics_hhh_tt(CombineHarvester &cb)']]], + ['addsystematics_5ftt_608',['AddSystematics_tt',['../namespacech.html#ac1578f3e0a1da427e6750ba4cefd94b8',1,'ch']]], + ['addsystfromproc_609',['AddSystFromProc',['../classch_1_1_combine_harvester.html#a00bd4490f33ab0ae404fb46a8cbd9dfe',1,'ch::CombineHarvester']]], + ['addsystvar_610',['AddSystVar',['../classch_1_1_combine_harvester.html#a2dcd4e28456978a5b876ea76acb24c37',1,'ch::CombineHarvester']]], + ['addworkspace_611',['AddWorkspace',['../classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d',1,'ch::CombineHarvester']]], + ['all_5fattributes_612',['all_attributes',['../classch_1_1_object.html#af6956eda45da72f747aeee28fadfe4fe',1,'ch::Object']]], + ['analysis_613',['analysis',['../classch_1_1_object.html#aa69ff36a99fa4cffbc908584b041a2c8',1,'ch::Object::analysis()'],['../classch_1_1_combine_harvester.html#a672af065808c26e0795259876787c57f',1,'ch::CombineHarvester::analysis(std::vector< std::string > const &vec, bool cond=true)']]], + ['analysis_5fset_614',['analysis_set',['../classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631',1,'ch::CombineHarvester']]], + ['any_5fof_615',['any_of',['../namespacech.html#a9ae81b01c3e51356f05c2734d4e7fd8d',1,'ch']]], + ['args_616',['Args',['../classch_1_1syst_1_1_syst_map_func.html#a04de0fc2c65b817a318d129e4f7615d4',1,'ch::syst::SystMapFunc::Args()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a4c278563123e3a5f045dfb98cf33f8fc',1,'ch::syst::SystMapAsymm::Args()'],['../classch_1_1syst_1_1_syst_map.html#a452609011e0f85963821c7caf45f8b2b',1,'ch::syst::SystMap::Args()']]], + ['asth1f_617',['AsTH1F',['../namespacech.html#af9b462e52384bf17acf24c57bee7a5d3',1,'ch']]], + ['asymm_618',['asymm',['../classch_1_1_systematic.html#a5764d6db4954b8aac554776c149d3201',1,'ch::Systematic']]], + ['attr_619',['attr',['../classch_1_1_combine_harvester.html#a634f83792bbce25a8ceed4621fbb6ca2',1,'ch::CombineHarvester']]], + ['attribute_620',['attribute',['../classch_1_1_object.html#a3f131c3c63a86f91cab1d2fb56c86bb9',1,'ch::Object']]], + ['autorebin_621',['AutoRebin',['../classch_1_1_auto_rebin.html#a9305a4b7d600e31a17ccc6606d488825',1,'ch::AutoRebin']]] ]; diff --git a/search/functions_1.html b/search/functions_1.html index d4929aaf1d6..ef4088b89bc 100644 --- a/search/functions_1.html +++ b/search/functions_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_1.js b/search/functions_1.js index c36268d9885..d8865a8bb8d 100644 --- a/search/functions_1.js +++ b/search/functions_1.js @@ -1,12 +1,12 @@ var searchData= [ - ['backgrounds_666',['backgrounds',['../classch_1_1_combine_harvester.html#a1efc38e1377d77deaf5e9c4c8adbb250',1,'ch::CombineHarvester']]], - ['bestfit_667',['bestFit',['../_plotting___contours_8h.html#a674a5621e3faa0a1cd48155ca2cbbf48',1,'bestFit(): Plotting_Contours.h'],['../namespacepython_1_1plotting.html#adeba935104d42e1b1991046ddf8573e8',1,'python.plotting.bestFit()']]], - ['bin_668',['bin',['../classch_1_1_combine_harvester.html#a83dd50569a1f1a4b5a46f2ad2b5c1cdb',1,'ch::CombineHarvester::bin()'],['../classch_1_1_object.html#a7b588d78c22464ebe2b793cbaa2366d3',1,'ch::Object::bin()']]], - ['bin_5fid_669',['bin_id',['../classch_1_1_combine_harvester.html#a19106a6a89c84b90308b34672de6c187',1,'ch::CombineHarvester::bin_id()'],['../classch_1_1_object.html#a8f5df1a5ccf1f4053c67aaa98dec71e6',1,'ch::Object::bin_id()']]], - ['bin_5fid_5fset_670',['bin_id_set',['../classch_1_1_combine_harvester.html#a51e79e40581a2f3602292cde9a858784',1,'ch::CombineHarvester']]], - ['bin_5fset_671',['bin_set',['../classch_1_1_combine_harvester.html#a869c951c635b86fba33b2c550c9c39c9',1,'ch::CombineHarvester']]], - ['binbybinfactory_672',['BinByBinFactory',['../classch_1_1_bin_by_bin_factory.html#ad83ac54b41f5ee9eabc33866bb61b834',1,'ch::BinByBinFactory']]], - ['bkginfo_673',['BkgInfo',['../struct_bkg_info.html#a0ea51e03c4a8105333b7272e8532861c',1,'BkgInfo']]], - ['buildroomorphing_674',['BuildRooMorphing',['../namespacech.html#a011bcc8eb52bfa118fd44ade245e9e45',1,'ch']]] + ['backgrounds_622',['backgrounds',['../classch_1_1_combine_harvester.html#a1efc38e1377d77deaf5e9c4c8adbb250',1,'ch::CombineHarvester']]], + ['bestfit_623',['bestFit',['../_plotting___contours_8h.html#a674a5621e3faa0a1cd48155ca2cbbf48',1,'Plotting_Contours.h']]], + ['bin_624',['bin',['../classch_1_1_combine_harvester.html#a83dd50569a1f1a4b5a46f2ad2b5c1cdb',1,'ch::CombineHarvester::bin()'],['../classch_1_1_object.html#a7b588d78c22464ebe2b793cbaa2366d3',1,'ch::Object::bin()']]], + ['bin_5fid_625',['bin_id',['../classch_1_1_combine_harvester.html#a19106a6a89c84b90308b34672de6c187',1,'ch::CombineHarvester::bin_id()'],['../classch_1_1_object.html#a8f5df1a5ccf1f4053c67aaa98dec71e6',1,'ch::Object::bin_id()']]], + ['bin_5fid_5fset_626',['bin_id_set',['../classch_1_1_combine_harvester.html#a51e79e40581a2f3602292cde9a858784',1,'ch::CombineHarvester']]], + ['bin_5fset_627',['bin_set',['../classch_1_1_combine_harvester.html#a869c951c635b86fba33b2c550c9c39c9',1,'ch::CombineHarvester']]], + ['binbybinfactory_628',['BinByBinFactory',['../classch_1_1_bin_by_bin_factory.html#ad83ac54b41f5ee9eabc33866bb61b834',1,'ch::BinByBinFactory']]], + ['bkginfo_629',['BkgInfo',['../struct_bkg_info.html#a0ea51e03c4a8105333b7272e8532861c',1,'BkgInfo']]], + ['buildroomorphing_630',['BuildRooMorphing',['../namespacech.html#a011bcc8eb52bfa118fd44ade245e9e45',1,'ch']]] ]; diff --git a/search/functions_10.html b/search/functions_10.html index 839ba3308f0..1bdc125722e 100644 --- a/search/functions_10.html +++ b/search/functions_10.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_10.js b/search/functions_10.js index 9155c7e698f..075f1390736 100644 --- a/search/functions_10.js +++ b/search/functions_10.js @@ -1,96 +1,89 @@ var searchData= [ - ['scale_894',['scale',['../classch_1_1_systematic.html#ad8e5f3d29de730a563a1462ac964d5e5',1,'ch::Systematic']]], - ['set_895',['Set',['../namespacepython_1_1plotting.html#afa5ad39d3467939dbf1252650e62c0e8',1,'python::plotting']]], - ['set2vec_896',['Set2Vec',['../namespacech.html#a5e23234ab65cfa48c99b83d94e291125',1,'ch']]], - ['set_5fall_5fattributes_897',['set_all_attributes',['../classch_1_1_object.html#a8c779be0d578124a56a17031abd86c9f',1,'ch::Object']]], - ['set_5fanalysis_898',['set_analysis',['../classch_1_1_object.html#a1bae4062339f6b27251fa40eb3360120',1,'ch::Object']]], - ['set_5fasymm_899',['set_asymm',['../classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf',1,'ch::Systematic']]], - ['set_5fattribute_900',['set_attribute',['../classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b',1,'ch::Object']]], - ['set_5fbin_901',['set_bin',['../classch_1_1_object.html#a7997c967b45c8048e5d37284634192c8',1,'ch::Object']]], - ['set_5fbin_5fid_902',['set_bin_id',['../classch_1_1_object.html#af89246351b95fa11b2baa05b6d7ed191',1,'ch::Object']]], - ['set_5fchannel_903',['set_channel',['../classch_1_1_object.html#af7f8e3b47e518df640826bd2c6aac600',1,'ch::Object']]], - ['set_5fdata_904',['set_data',['../classch_1_1_observation.html#a8069a2cfb78c84325ba023064930bd43',1,'ch::Observation::set_data()'],['../classch_1_1_process.html#a97283db14e35e64eef1f0231c8cdd64c',1,'ch::Process::set_data()'],['../classch_1_1_systematic.html#a7488a889a863e7ae1395ff80320edbd8',1,'ch::Systematic::set_data()']]], - ['set_5fera_905',['set_era',['../classch_1_1_object.html#aeb86ec002c906c6845c7ae304435c1c7',1,'ch::Object']]], - ['set_5ferr_5fd_906',['set_err_d',['../classch_1_1_parameter.html#a2c1b75c9deb9a66a5065c6e67bb7eecf',1,'ch::Parameter']]], - ['set_5ferr_5fu_907',['set_err_u',['../classch_1_1_parameter.html#a29a0eec868eb1dd17e7443f0e154c35c',1,'ch::Parameter']]], - ['set_5ffrozen_908',['set_frozen',['../classch_1_1_parameter.html#a1539eec34291394e236f4dc6d7a43279',1,'ch::Parameter']]], - ['set_5fmass_909',['set_mass',['../classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3',1,'ch::Object']]], - ['set_5fname_910',['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_911',['set_norm',['../classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20',1,'ch::Process']]], - ['set_5fobservable_912',['set_observable',['../classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f',1,'ch::Process']]], - ['set_5fpdf_913',['set_pdf',['../classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae',1,'ch::Process::set_pdf()'],['../classch_1_1_systematic.html#a15b322bf20273a650dbdaa4316eb013c',1,'ch::Systematic::set_pdf()']]], - ['set_5fprocess_914',['set_process',['../classch_1_1_object.html#a3515d3c5453c0141c198718eb7b4bd03',1,'ch::Object']]], - ['set_5frange_915',['set_range',['../classch_1_1_parameter.html#a63f525de6f8c58439e852c0224ab2fec',1,'ch::Parameter']]], - ['set_5frange_5fd_916',['set_range_d',['../classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff',1,'ch::Parameter']]], - ['set_5frange_5fu_917',['set_range_u',['../classch_1_1_parameter.html#aac84fa2bc04bb36353fdb766d97bf89e',1,'ch::Parameter']]], - ['set_5frate_918',['set_rate',['../classch_1_1_observation.html#a08892e94877d2006921a9e3b3007eb3b',1,'ch::Observation::set_rate()'],['../classch_1_1_process.html#a178a4692175af3cb3f9699f424a03b30',1,'ch::Process::set_rate()']]], - ['set_5fscale_919',['set_scale',['../classch_1_1_systematic.html#ac02769c45caa0d41076ae1d92d5860ff',1,'ch::Systematic']]], - ['set_5fshape_920',['set_shape',['../classch_1_1_observation.html#a69698abc2c0a53c737e3e595d37f2b58',1,'ch::Observation::set_shape(std::unique_ptr< TH1 > shape, bool set_rate)'],['../classch_1_1_observation.html#ab61b8fc11b80ebd6136d3923a6d80300',1,'ch::Observation::set_shape(TH1 const &shape, bool set_rate)'],['../classch_1_1_process.html#a4f1a875514ceec5b7758112dc88b92ea',1,'ch::Process::set_shape(std::unique_ptr< TH1 > shape, bool set_rate)'],['../classch_1_1_process.html#a51ea6848ecb6b5030d96eff0b95ad99d',1,'ch::Process::set_shape(TH1 const &shape, bool set_rate)']]], - ['set_5fshapes_921',['set_shapes',['../classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d',1,'ch::Systematic::set_shapes(std::unique_ptr< TH1 > shape_u, std::unique_ptr< TH1 > shape_d, TH1 const *nominal)'],['../classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661',1,'ch::Systematic::set_shapes(TH1 const &shape_u, TH1 const &shape_d, TH1 const &nominal)']]], - ['set_5fsignal_922',['set_signal',['../classch_1_1_object.html#aef78a48151888bb0731a2e00cd0fa62c',1,'ch::Object']]], - ['set_5ftype_923',['set_type',['../classch_1_1_systematic.html#ad6299bae494e334e253e7486f7bff1d0',1,'ch::Systematic']]], - ['set_5fval_924',['set_val',['../classch_1_1_parameter.html#aae9193801a4ac8da13c7b873d87f2e3e',1,'ch::Parameter']]], - ['set_5fvalue_5fd_925',['set_value_d',['../classch_1_1_systematic.html#a40fb079acc7cdf7acd81d7bccb653f8a',1,'ch::Systematic']]], - ['set_5fvalue_5fu_926',['set_value_u',['../classch_1_1_systematic.html#a780d467fd100c4c521fc604ddcea6f0f',1,'ch::Systematic']]], - ['setaddthreshold_927',['SetAddThreshold',['../classch_1_1_bin_by_bin_factory.html#a022063406869d59a03e7aef47ce53e34',1,'ch::BinByBinFactory']]], - ['setautomcstats_928',['SetAutoMCStats',['../classch_1_1_combine_harvester.html#a8598c8d734f7461228d6e4d4a20ba33b',1,'ch::CombineHarvester']]], - ['setbinthreshold_929',['SetBinThreshold',['../classch_1_1_auto_rebin.html#aa08dc119e1c1f3296fbeb59732529338',1,'ch::AutoRebin']]], - ['setbinuncertfraction_930',['SetBinUncertFraction',['../classch_1_1_auto_rebin.html#ab156ebbbbbfc264c736d06f182da7c25',1,'ch::AutoRebin']]], - ['setbirdpalette_931',['SetBirdPalette',['../namespacepython_1_1plotting.html#af48f1beff13dca9995aca96ecac48f27',1,'python::plotting']]], - ['setcorrmatrixpalette_932',['SetCorrMatrixPalette',['../namespacepython_1_1plotting.html#aae4d4cf46e04b00b9a336be508218b17',1,'python::plotting']]], - ['setdeepseapalette_933',['SetDeepSeaPalette',['../namespacepython_1_1plotting.html#a7711053e47e60c813e7a3f0855ed6159',1,'python::plotting']]], - ['setfixnorm_934',['SetFixNorm',['../classch_1_1_bin_by_bin_factory.html#a05d997b69c619df3c2f7d20e4e7106b7',1,'ch::BinByBinFactory']]], - ['setflag_935',['SetFlag',['../classch_1_1_combine_harvester.html#a4b18f900247617db79a26ea0a08df15c',1,'ch::CombineHarvester']]], - ['setfromall_936',['SetFromAll',['../classch_1_1_combine_harvester.html#ac514e331fc81a67fc9d8de884b5666c3',1,'ch::CombineHarvester']]], - ['setfrombinname_937',['SetFromBinName',['../namespacech.html#af9aa1e238306d161656d15f0bf4fb8d4',1,'ch']]], - ['setfromobs_938',['SetFromObs',['../classch_1_1_combine_harvester.html#a455e0b19f8ff00c2b82d78baf59055a6',1,'ch::CombineHarvester']]], - ['setfromprocs_939',['SetFromProcs',['../classch_1_1_combine_harvester.html#a7a0c6913b055e11798269034ae324298',1,'ch::CombineHarvester']]], - ['setfromsysts_940',['SetFromSysts',['../classch_1_1_combine_harvester.html#a6c60a401231bfded23a56abe3f6dbf77',1,'ch::CombineHarvester']]], - ['setgroup_941',['SetGroup',['../classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5',1,'ch::CombineHarvester']]], - ['sethorizontalmorphingvariable_942',['SetHorizontalMorphingVariable',['../classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3',1,'ch::CMSHistFuncFactory']]], - ['setmergesaturatedbins_943',['SetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#a7240cc3c8d9be4d77e3e041256397e8f',1,'ch::BinByBinFactory']]], - ['setmergethreshold_944',['SetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#aa983d4e391adbf5a7af40458a3ffc062',1,'ch::BinByBinFactory']]], - ['setmergezerobins_945',['SetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#a57a7a111d2b683912cb70e5e9786432c',1,'ch::BinByBinFactory']]], - ['setmintozero_946',['SetMinToZero',['../namespacepython_1_1plotting.html#a522b5996aee3a56cab95f8a94c0d2009',1,'python::plotting']]], - ['setparinws_947',['setParInWs',['../classch_1_1_combine_harvester.html#af6906e10545d3958d0dd82472272e31e',1,'ch::CombineHarvester']]], - ['setpattern_948',['SetPattern',['../classch_1_1_bin_by_bin_factory.html#a4f8c2b763538030dcab6cd3566b27568',1,'ch::BinByBinFactory']]], - ['setpdfbins_949',['SetPdfBins',['../classch_1_1_combine_harvester.html#ad61cdbfaea0ed88c09651c2a92c934e2',1,'ch::CombineHarvester']]], - ['setperformrebin_950',['SetPerformRebin',['../classch_1_1_auto_rebin.html#a88bd0408dd758d31fe3f60815bbec5d3',1,'ch::AutoRebin']]], - ['setpoissonerrors_951',['SetPoissonErrors',['../classch_1_1_bin_by_bin_factory.html#a76d34782e2b31e762f07093e7d3748ab',1,'ch::BinByBinFactory']]], - ['setproperties_952',['SetProperties',['../namespacech.html#a0ea5d53cb275e53807f576a4020cf15e',1,'ch']]], - ['setrebinmode_953',['SetRebinMode',['../classch_1_1_auto_rebin.html#a5bac592f221a124caa199530c4a0d1d0',1,'ch::AutoRebin']]], - ['setstandardbinname_954',['SetStandardBinName',['../namespacech.html#a1a29f03f52660fd3a9fce0c353e3eee5',1,'ch']]], - ['setstandardbinnames_955',['SetStandardBinNames',['../namespacech.html#a99d1b22dfcd46bfde6a31a7a5765cd2b',1,'ch']]], - ['settdrstyle_956',['SetTDRStyle',['../_plotting___style_8h.html#a34d58d5193fe385ca42185433c16b69a',1,'SetTDRStyle(): Plotting_Style.h'],['../namespacepython_1_1plotting.html#a985823947a10fe741fd66736aff50b7e',1,'python.plotting.SetTDRStyle()']]], - ['setuptwopadsplitasratio_957',['SetupTwoPadSplitAsRatio',['../_plotting_8h.html#ac22871e6dbf88fd29fa06f8a2cfb5f8d',1,'SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TH1 *upper, TH1 *lower, TString y_title, bool y_centered, float y_min, float y_max): Plotting.h'],['../_plotting_8h.html#a293279a5520769bf993d81e4dc070709',1,'SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TString y_title, bool y_centered, float y_min, float y_max): Plotting.h'],['../namespacepython_1_1plotting.html#ac6210cfafae6f9dd8b7ec9d30f3b8275',1,'python.plotting.SetupTwoPadSplitAsRatio()']]], - ['setverbosity_958',['SetVerbosity',['../classch_1_1_auto_rebin.html#a934b5cdc81e812c6507ab33ddf6621d2',1,'ch::AutoRebin::SetVerbosity()'],['../classch_1_1_bin_by_bin_factory.html#a8ac5cd6b06c95b4bee7449dbde576067',1,'ch::BinByBinFactory::SetVerbosity()'],['../classch_1_1_card_writer.html#a55eae164745e2d1a4cc5a8a8cde36033',1,'ch::CardWriter::SetVerbosity()'],['../classch_1_1_combine_harvester.html#a00245515d95807d1d0c9501c5360ac01',1,'ch::CombineHarvester::SetVerbosity()']]], - ['setwildcardmasses_959',['SetWildcardMasses',['../classch_1_1_card_writer.html#a34ef01d0ec9b52687437e01db911f3c8',1,'ch::CardWriter']]], - ['shape_960',['shape',['../classch_1_1_observation.html#a38bcb70f9e4fe06bac1d5175247ad4e2',1,'ch::Observation::shape()'],['../classch_1_1_process.html#ad40cf460a5269fc12a96411ea8bad2f2',1,'ch::Process::shape()']]], - ['shape_5fd_961',['shape_d',['../classch_1_1_systematic.html#a5871a51570f061eed68fd8610f6041bc',1,'ch::Systematic']]], - ['shape_5fu_962',['shape_u',['../classch_1_1_systematic.html#a8341af1252e6db54ad999f3147bed794',1,'ch::Systematic']]], - ['shapeasth1f_963',['ShapeAsTH1F',['../classch_1_1_observation.html#a35828ac184b5aad339c5a0254f3b179e',1,'ch::Observation::ShapeAsTH1F()'],['../classch_1_1_process.html#a08ebc03f0519516a3e1b8f7aaa37d807',1,'ch::Process::ShapeAsTH1F()']]], - ['shapedasth1f_964',['ShapeDAsTH1F',['../classch_1_1_systematic.html#ad27b72a4bdb21f6ee93e490b98398eb3',1,'ch::Systematic']]], - ['shapeuasth1f_965',['ShapeUAsTH1F',['../classch_1_1_systematic.html#ac79c7195d56957d39a5329f856d20fe8',1,'ch::Systematic']]], - ['signal_966',['signal',['../classch_1_1_object.html#ae3d98ea3f4b25541efc26fa563ed1ed2',1,'ch::Object']]], - ['signals_967',['signals',['../classch_1_1_combine_harvester.html#a21c176f208a1603055113bd00e920d2d',1,'ch::CombineHarvester']]], - ['sortgraph_968',['SortGraph',['../namespacepython_1_1plotting.html#aaecde5040c409a79db0a7cc3d5a5007f',1,'python::plotting']]], - ['soverbinfo_969',['SOverBInfo',['../structch_1_1_s_over_b_info.html#a4e552b096fd68bb3ebf2de40bc2cf9d1',1,'ch::SOverBInfo::SOverBInfo()'],['../structch_1_1_s_over_b_info.html#ac6c910ec7a9f9273987ef29a93d3ee96',1,'ch::SOverBInfo::SOverBInfo(TH1F const *sig, TH1F const *bkg, unsigned steps, double frac)']]], - ['splitsyst_970',['SplitSyst',['../namespacech.html#a0f62630d67d75c1b6143c0519da2a720',1,'ch']]], - ['standardaxes_971',['StandardAxes',['../_plotting_8h.html#a976a4920cd03f97ded8454279c895a32',1,'StandardAxes(): Plotting.h'],['../namespacepython_1_1plotting.html#a0e1f1088e52d9a278b2e0dc1af4512ba',1,'python.plotting.StandardAxes(xaxis, yaxis, var, units, fmt='.1f')'],['../namespacepython_1_1plotting.html#a504cc85d525735f2042e0f72b6e04ef7',1,'python.plotting.StandardAxes(xaxis, yaxis, var, units)']]], - ['standardlimitsfromjsonfile_972',['StandardLimitsFromJSONFile',['../namespacepython_1_1plotting.html#a5d17f0ddd4eb0e15dc97958d25323f1c',1,'python::plotting']]], - ['starttimer_973',['StartTimer',['../classch_1_1_fn_timer.html#aa6368e35ad1520773275baf7ad1bbcb6',1,'ch::FnTimer']]], - ['stoptimer_974',['StopTimer',['../classch_1_1_fn_timer.html#a4dc02384a997b93294cd083b107a673e',1,'ch::FnTimer']]], - ['stylelimitband_975',['StyleLimitBand',['../namespacepython_1_1plotting.html#a156ac4a82a5eb80648008c9abadbd9c0',1,'python::plotting']]], - ['stylemultigraph_976',['styleMultiGraph',['../_plotting___contours_8h.html#ab5af5fc3993a46ace5fa84317653b4d3',1,'Plotting_Contours.h']]], - ['stylemultigraphmarker_977',['styleMultiGraphMarker',['../_plotting___contours_8h.html#a4261c9baca0c43812cbff936c0724109',1,'Plotting_Contours.h']]], - ['swap_978',['swap',['../namespacech.html#a98935d065d3339aebddc63328e2233ba',1,'ch::swap(CombineHarvester &first, CombineHarvester &second)'],['../namespacech.html#acfd60821a2deee24955d3a98e6605fd0',1,'ch::swap(Object &first, Object &second)'],['../namespacech.html#a53918f33e1cc50065abd25be2b64539a',1,'ch::swap(Observation &first, Observation &second)'],['../namespacech.html#a44b242b58441307bf5c7f0dbfbafe865',1,'ch::swap(Parameter &first, Parameter &second)'],['../namespacech.html#a8b80f6510601d33e773f90b1160d5463',1,'ch::swap(Process &first, Process &second)'],['../namespacech.html#a675f0b80d66b8a9b3948231c94a20fba',1,'ch::swap(Systematic &first, Systematic &second)']]], - ['swapupanddown_979',['SwapUpAndDown',['../classch_1_1_systematic.html#a838d5c14e2be2610010e7354eb706fae',1,'ch::Systematic']]], - ['syst_5fname_980',['syst_name',['../classch_1_1_combine_harvester.html#a8a287dbad29d1c2c4963eef0e5d08ea9',1,'ch::CombineHarvester']]], - ['syst_5fname_5fset_981',['syst_name_set',['../classch_1_1_combine_harvester.html#ac3ef7424cb86d12fd294d9c6de98d533',1,'ch::CombineHarvester']]], - ['syst_5ftype_982',['syst_type',['../classch_1_1_combine_harvester.html#af13ff7dd8c281cd9e9cfd6b11fc05b95',1,'ch::CombineHarvester']]], - ['syst_5ftype_5fset_983',['syst_type_set',['../classch_1_1_combine_harvester.html#a6db7fd938efd2ce05454a72c4b6cbc78',1,'ch::CombineHarvester']]], - ['systematic_984',['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)']]], - ['systworkspacename_985',['SystWorkspaceName',['../structch_1_1_hist_mapping.html#a4fcefaafa55fe7973892bccd732e25b3',1,'ch::HistMapping']]], - ['systworkspaceobj_986',['SystWorkspaceObj',['../structch_1_1_hist_mapping.html#a0a2ddf13b993ee9059918ce288b93bd8',1,'ch::HistMapping']]] + ['scale_818',['scale',['../classch_1_1_systematic.html#ad8e5f3d29de730a563a1462ac964d5e5',1,'ch::Systematic']]], + ['set2vec_819',['Set2Vec',['../namespacech.html#a5e23234ab65cfa48c99b83d94e291125',1,'ch']]], + ['set_5fall_5fattributes_820',['set_all_attributes',['../classch_1_1_object.html#a8c779be0d578124a56a17031abd86c9f',1,'ch::Object']]], + ['set_5fanalysis_821',['set_analysis',['../classch_1_1_object.html#a1bae4062339f6b27251fa40eb3360120',1,'ch::Object']]], + ['set_5fasymm_822',['set_asymm',['../classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf',1,'ch::Systematic']]], + ['set_5fattribute_823',['set_attribute',['../classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b',1,'ch::Object']]], + ['set_5fbin_824',['set_bin',['../classch_1_1_object.html#a7997c967b45c8048e5d37284634192c8',1,'ch::Object']]], + ['set_5fbin_5fid_825',['set_bin_id',['../classch_1_1_object.html#af89246351b95fa11b2baa05b6d7ed191',1,'ch::Object']]], + ['set_5fchannel_826',['set_channel',['../classch_1_1_object.html#af7f8e3b47e518df640826bd2c6aac600',1,'ch::Object']]], + ['set_5fdata_827',['set_data',['../classch_1_1_observation.html#a8069a2cfb78c84325ba023064930bd43',1,'ch::Observation::set_data()'],['../classch_1_1_process.html#a97283db14e35e64eef1f0231c8cdd64c',1,'ch::Process::set_data()'],['../classch_1_1_systematic.html#a7488a889a863e7ae1395ff80320edbd8',1,'ch::Systematic::set_data()']]], + ['set_5fera_828',['set_era',['../classch_1_1_object.html#aeb86ec002c906c6845c7ae304435c1c7',1,'ch::Object']]], + ['set_5ferr_5fd_829',['set_err_d',['../classch_1_1_parameter.html#a2c1b75c9deb9a66a5065c6e67bb7eecf',1,'ch::Parameter']]], + ['set_5ferr_5fu_830',['set_err_u',['../classch_1_1_parameter.html#a29a0eec868eb1dd17e7443f0e154c35c',1,'ch::Parameter']]], + ['set_5ffrozen_831',['set_frozen',['../classch_1_1_parameter.html#a1539eec34291394e236f4dc6d7a43279',1,'ch::Parameter']]], + ['set_5fmass_832',['set_mass',['../classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3',1,'ch::Object']]], + ['set_5fname_833',['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_834',['set_norm',['../classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20',1,'ch::Process']]], + ['set_5fobservable_835',['set_observable',['../classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f',1,'ch::Process']]], + ['set_5fparam_5fstr_5fext_836',['set_param_str_ext',['../classch_1_1_systematic.html#a0c0e9adce37196093c5bc303f78f4d08',1,'ch::Systematic']]], + ['set_5fpdf_837',['set_pdf',['../classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae',1,'ch::Process::set_pdf()'],['../classch_1_1_systematic.html#a15b322bf20273a650dbdaa4316eb013c',1,'ch::Systematic::set_pdf()']]], + ['set_5fprocess_838',['set_process',['../classch_1_1_object.html#a3515d3c5453c0141c198718eb7b4bd03',1,'ch::Object']]], + ['set_5frange_839',['set_range',['../classch_1_1_parameter.html#a63f525de6f8c58439e852c0224ab2fec',1,'ch::Parameter']]], + ['set_5frange_5fd_840',['set_range_d',['../classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff',1,'ch::Parameter']]], + ['set_5frange_5fu_841',['set_range_u',['../classch_1_1_parameter.html#aac84fa2bc04bb36353fdb766d97bf89e',1,'ch::Parameter']]], + ['set_5frate_842',['set_rate',['../classch_1_1_observation.html#a08892e94877d2006921a9e3b3007eb3b',1,'ch::Observation::set_rate()'],['../classch_1_1_process.html#a178a4692175af3cb3f9699f424a03b30',1,'ch::Process::set_rate()']]], + ['set_5fscale_843',['set_scale',['../classch_1_1_systematic.html#ac02769c45caa0d41076ae1d92d5860ff',1,'ch::Systematic']]], + ['set_5fshape_844',['set_shape',['../classch_1_1_observation.html#a69698abc2c0a53c737e3e595d37f2b58',1,'ch::Observation::set_shape()'],['../classch_1_1_process.html#a51ea6848ecb6b5030d96eff0b95ad99d',1,'ch::Process::set_shape(TH1 const &shape, bool set_rate)'],['../classch_1_1_process.html#a4f1a875514ceec5b7758112dc88b92ea',1,'ch::Process::set_shape(std::unique_ptr< TH1 > shape, bool set_rate)'],['../classch_1_1_observation.html#ab61b8fc11b80ebd6136d3923a6d80300',1,'ch::Observation::set_shape()']]], + ['set_5fshapes_845',['set_shapes',['../classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d',1,'ch::Systematic::set_shapes(std::unique_ptr< TH1 > shape_u, std::unique_ptr< TH1 > shape_d, TH1 const *nominal)'],['../classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661',1,'ch::Systematic::set_shapes(TH1 const &shape_u, TH1 const &shape_d, TH1 const &nominal)']]], + ['set_5fsignal_846',['set_signal',['../classch_1_1_object.html#aef78a48151888bb0731a2e00cd0fa62c',1,'ch::Object']]], + ['set_5ftype_847',['set_type',['../classch_1_1_systematic.html#ad6299bae494e334e253e7486f7bff1d0',1,'ch::Systematic']]], + ['set_5fval_848',['set_val',['../classch_1_1_parameter.html#aae9193801a4ac8da13c7b873d87f2e3e',1,'ch::Parameter']]], + ['set_5fvalue_5fd_849',['set_value_d',['../classch_1_1_systematic.html#a40fb079acc7cdf7acd81d7bccb653f8a',1,'ch::Systematic']]], + ['set_5fvalue_5fu_850',['set_value_u',['../classch_1_1_systematic.html#a780d467fd100c4c521fc604ddcea6f0f',1,'ch::Systematic']]], + ['setaddthreshold_851',['SetAddThreshold',['../classch_1_1_bin_by_bin_factory.html#a022063406869d59a03e7aef47ce53e34',1,'ch::BinByBinFactory']]], + ['setautomcstats_852',['SetAutoMCStats',['../classch_1_1_combine_harvester.html#a8598c8d734f7461228d6e4d4a20ba33b',1,'ch::CombineHarvester']]], + ['setbinthreshold_853',['SetBinThreshold',['../classch_1_1_auto_rebin.html#aa08dc119e1c1f3296fbeb59732529338',1,'ch::AutoRebin']]], + ['setbinuncertfraction_854',['SetBinUncertFraction',['../classch_1_1_auto_rebin.html#ab156ebbbbbfc264c736d06f182da7c25',1,'ch::AutoRebin']]], + ['setfixnorm_855',['SetFixNorm',['../classch_1_1_bin_by_bin_factory.html#a05d997b69c619df3c2f7d20e4e7106b7',1,'ch::BinByBinFactory']]], + ['setflag_856',['SetFlag',['../classch_1_1_combine_harvester.html#a4b18f900247617db79a26ea0a08df15c',1,'ch::CombineHarvester']]], + ['setfromall_857',['SetFromAll',['../classch_1_1_combine_harvester.html#ac514e331fc81a67fc9d8de884b5666c3',1,'ch::CombineHarvester']]], + ['setfrombinname_858',['SetFromBinName',['../namespacech.html#af9aa1e238306d161656d15f0bf4fb8d4',1,'ch']]], + ['setfromobs_859',['SetFromObs',['../classch_1_1_combine_harvester.html#a455e0b19f8ff00c2b82d78baf59055a6',1,'ch::CombineHarvester']]], + ['setfromprocs_860',['SetFromProcs',['../classch_1_1_combine_harvester.html#a7a0c6913b055e11798269034ae324298',1,'ch::CombineHarvester']]], + ['setfromsysts_861',['SetFromSysts',['../classch_1_1_combine_harvester.html#a6c60a401231bfded23a56abe3f6dbf77',1,'ch::CombineHarvester']]], + ['setgroup_862',['SetGroup',['../classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5',1,'ch::CombineHarvester']]], + ['sethorizontalmorphingvariable_863',['SetHorizontalMorphingVariable',['../classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3',1,'ch::CMSHistFuncFactory']]], + ['setmergesaturatedbins_864',['SetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#a7240cc3c8d9be4d77e3e041256397e8f',1,'ch::BinByBinFactory']]], + ['setmergethreshold_865',['SetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#aa983d4e391adbf5a7af40458a3ffc062',1,'ch::BinByBinFactory']]], + ['setmergezerobins_866',['SetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#a57a7a111d2b683912cb70e5e9786432c',1,'ch::BinByBinFactory']]], + ['setparinws_867',['setParInWs',['../classch_1_1_combine_harvester.html#af6906e10545d3958d0dd82472272e31e',1,'ch::CombineHarvester']]], + ['setpattern_868',['SetPattern',['../classch_1_1_bin_by_bin_factory.html#a4f8c2b763538030dcab6cd3566b27568',1,'ch::BinByBinFactory']]], + ['setpdfbins_869',['SetPdfBins',['../classch_1_1_combine_harvester.html#ad61cdbfaea0ed88c09651c2a92c934e2',1,'ch::CombineHarvester']]], + ['setperformrebin_870',['SetPerformRebin',['../classch_1_1_auto_rebin.html#a88bd0408dd758d31fe3f60815bbec5d3',1,'ch::AutoRebin']]], + ['setpoissonerrors_871',['SetPoissonErrors',['../classch_1_1_bin_by_bin_factory.html#a76d34782e2b31e762f07093e7d3748ab',1,'ch::BinByBinFactory']]], + ['setproperties_872',['SetProperties',['../namespacech.html#a0ea5d53cb275e53807f576a4020cf15e',1,'ch']]], + ['setrebinmode_873',['SetRebinMode',['../classch_1_1_auto_rebin.html#a5bac592f221a124caa199530c4a0d1d0',1,'ch::AutoRebin']]], + ['setstandardbinname_874',['SetStandardBinName',['../namespacech.html#a1a29f03f52660fd3a9fce0c353e3eee5',1,'ch']]], + ['setstandardbinnames_875',['SetStandardBinNames',['../namespacech.html#a99d1b22dfcd46bfde6a31a7a5765cd2b',1,'ch']]], + ['settdrstyle_876',['SetTDRStyle',['../_plotting___style_8h.html#a34d58d5193fe385ca42185433c16b69a',1,'Plotting_Style.h']]], + ['setuptwopadsplitasratio_877',['SetupTwoPadSplitAsRatio',['../_plotting_8h.html#a293279a5520769bf993d81e4dc070709',1,'SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TString y_title, bool y_centered, float y_min, float y_max): Plotting.h'],['../_plotting_8h.html#ac22871e6dbf88fd29fa06f8a2cfb5f8d',1,'SetupTwoPadSplitAsRatio(std::vector< TPad * > const &pads, TH1 *upper, TH1 *lower, TString y_title, bool y_centered, float y_min, float y_max): Plotting.h']]], + ['setverbosity_878',['SetVerbosity',['../classch_1_1_combine_harvester.html#a00245515d95807d1d0c9501c5360ac01',1,'ch::CombineHarvester::SetVerbosity()'],['../classch_1_1_card_writer.html#a55eae164745e2d1a4cc5a8a8cde36033',1,'ch::CardWriter::SetVerbosity()'],['../classch_1_1_bin_by_bin_factory.html#a8ac5cd6b06c95b4bee7449dbde576067',1,'ch::BinByBinFactory::SetVerbosity()'],['../classch_1_1_auto_rebin.html#a934b5cdc81e812c6507ab33ddf6621d2',1,'ch::AutoRebin::SetVerbosity()']]], + ['setwildcardmasses_879',['SetWildcardMasses',['../classch_1_1_card_writer.html#a34ef01d0ec9b52687437e01db911f3c8',1,'ch::CardWriter']]], + ['shape_880',['shape',['../classch_1_1_observation.html#a38bcb70f9e4fe06bac1d5175247ad4e2',1,'ch::Observation::shape()'],['../classch_1_1_process.html#ad40cf460a5269fc12a96411ea8bad2f2',1,'ch::Process::shape()']]], + ['shape_5fd_881',['shape_d',['../classch_1_1_systematic.html#a5871a51570f061eed68fd8610f6041bc',1,'ch::Systematic']]], + ['shape_5fu_882',['shape_u',['../classch_1_1_systematic.html#a8341af1252e6db54ad999f3147bed794',1,'ch::Systematic']]], + ['shapeasth1f_883',['ShapeAsTH1F',['../classch_1_1_process.html#a08ebc03f0519516a3e1b8f7aaa37d807',1,'ch::Process::ShapeAsTH1F()'],['../classch_1_1_observation.html#a35828ac184b5aad339c5a0254f3b179e',1,'ch::Observation::ShapeAsTH1F()']]], + ['shapedasth1f_884',['ShapeDAsTH1F',['../classch_1_1_systematic.html#ad27b72a4bdb21f6ee93e490b98398eb3',1,'ch::Systematic']]], + ['shapeuasth1f_885',['ShapeUAsTH1F',['../classch_1_1_systematic.html#ac79c7195d56957d39a5329f856d20fe8',1,'ch::Systematic']]], + ['signal_886',['signal',['../classch_1_1_object.html#ae3d98ea3f4b25541efc26fa563ed1ed2',1,'ch::Object']]], + ['signals_887',['signals',['../classch_1_1_combine_harvester.html#a21c176f208a1603055113bd00e920d2d',1,'ch::CombineHarvester']]], + ['soverbinfo_888',['SOverBInfo',['../structch_1_1_s_over_b_info.html#ac6c910ec7a9f9273987ef29a93d3ee96',1,'ch::SOverBInfo::SOverBInfo(TH1F const *sig, TH1F const *bkg, unsigned steps, double frac)'],['../structch_1_1_s_over_b_info.html#a4e552b096fd68bb3ebf2de40bc2cf9d1',1,'ch::SOverBInfo::SOverBInfo()']]], + ['splitsyst_889',['SplitSyst',['../namespacech.html#a0f62630d67d75c1b6143c0519da2a720',1,'ch']]], + ['standardaxes_890',['StandardAxes',['../_plotting_8h.html#a976a4920cd03f97ded8454279c895a32',1,'Plotting.h']]], + ['starttimer_891',['StartTimer',['../classch_1_1_fn_timer.html#aa6368e35ad1520773275baf7ad1bbcb6',1,'ch::FnTimer']]], + ['stoptimer_892',['StopTimer',['../classch_1_1_fn_timer.html#a4dc02384a997b93294cd083b107a673e',1,'ch::FnTimer']]], + ['stylemultigraph_893',['styleMultiGraph',['../_plotting___contours_8h.html#ab5af5fc3993a46ace5fa84317653b4d3',1,'Plotting_Contours.h']]], + ['stylemultigraphmarker_894',['styleMultiGraphMarker',['../_plotting___contours_8h.html#a4261c9baca0c43812cbff936c0724109',1,'Plotting_Contours.h']]], + ['swap_895',['swap',['../namespacech.html#a675f0b80d66b8a9b3948231c94a20fba',1,'ch::swap(Systematic &first, Systematic &second)'],['../namespacech.html#a98935d065d3339aebddc63328e2233ba',1,'ch::swap(CombineHarvester &first, CombineHarvester &second)'],['../namespacech.html#acfd60821a2deee24955d3a98e6605fd0',1,'ch::swap(Object &first, Object &second)'],['../namespacech.html#a53918f33e1cc50065abd25be2b64539a',1,'ch::swap(Observation &first, Observation &second)'],['../namespacech.html#a44b242b58441307bf5c7f0dbfbafe865',1,'ch::swap(Parameter &first, Parameter &second)'],['../namespacech.html#a8b80f6510601d33e773f90b1160d5463',1,'ch::swap(Process &first, Process &second)']]], + ['swapupanddown_896',['SwapUpAndDown',['../classch_1_1_systematic.html#a838d5c14e2be2610010e7354eb706fae',1,'ch::Systematic']]], + ['syst_5fname_897',['syst_name',['../classch_1_1_combine_harvester.html#a8a287dbad29d1c2c4963eef0e5d08ea9',1,'ch::CombineHarvester']]], + ['syst_5fname_5fset_898',['syst_name_set',['../classch_1_1_combine_harvester.html#ac3ef7424cb86d12fd294d9c6de98d533',1,'ch::CombineHarvester']]], + ['syst_5ftype_899',['syst_type',['../classch_1_1_combine_harvester.html#af13ff7dd8c281cd9e9cfd6b11fc05b95',1,'ch::CombineHarvester']]], + ['syst_5ftype_5fset_900',['syst_type_set',['../classch_1_1_combine_harvester.html#a6db7fd938efd2ce05454a72c4b6cbc78',1,'ch::CombineHarvester']]], + ['systematic_901',['Systematic',['../classch_1_1_systematic.html#abfaf59dd68bf8a9346fc5a9ce3bb745d',1,'ch::Systematic::Systematic(Systematic &&other)'],['../classch_1_1_systematic.html#a3a32c848411fbc9ff19899670a3c9bfb',1,'ch::Systematic::Systematic(Systematic const &other)'],['../classch_1_1_systematic.html#a4e1cc3aec9d8ad8e8a482a07dbbc4eff',1,'ch::Systematic::Systematic()']]], + ['systworkspacename_902',['SystWorkspaceName',['../structch_1_1_hist_mapping.html#a4fcefaafa55fe7973892bccd732e25b3',1,'ch::HistMapping']]], + ['systworkspaceobj_903',['SystWorkspaceObj',['../structch_1_1_hist_mapping.html#a0a2ddf13b993ee9059918ce288b93bd8',1,'ch::HistMapping']]] ]; diff --git a/search/functions_11.html b/search/functions_11.html index 9d548c4f0db..188076ef289 100644 --- a/search/functions_11.html +++ b/search/functions_11.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_11.js b/search/functions_11.js index 05463ff3307..696bc0caa3b 100644 --- a/search/functions_11.js +++ b/search/functions_11.js @@ -1,20 +1,14 @@ var searchData= [ - ['tdrgrid_987',['TdrGrid',['../_plotting___style_8h.html#a0164a79c56b52dcd1963f0c015067238',1,'Plotting_Style.h']]], - ['tfileisgood_988',['TFileIsGood',['../namespacepython_1_1plotting.html#a966f8767c6188136aa2e16967b776931',1,'python::plotting']]], - ['tgraph2dfromtree_989',['TGraph2DFromTree',['../_plotting_8h.html#afd3d99fcf4abb2cc459734f0d7ce44e6',1,'TGraph2DFromTree(): Plotting.h'],['../namespacepython_1_1plotting.html#a564405ccf77ddbeb4f873925fa514e70',1,'python.plotting.TGraph2DFromTree()']]], - ['tgraphfromtable_990',['TGraphFromTable',['../namespacech.html#a847fd9dc77ba21e35a6b531e1d26902a',1,'ch']]], - ['tgraphfromtree_991',['TGraphFromTree',['../_plotting_8h.html#a9359e5d70c59b3cd3ec03c4c7b449d1f',1,'TGraphFromTree(): Plotting.h'],['../namespacepython_1_1plotting.html#a39c399a361eec985033409a45e7e74b9',1,'python.plotting.TGraphFromTree()']]], - ['th1f2data_992',['TH1F2Data',['../namespacech.html#a1347e48be022e182e17dfc421bf12680',1,'ch']]], - ['th2fromtgraph2d_993',['TH2FromTGraph2D',['../namespacepython_1_1plotting.html#ac888e7dc2299e1562bb4e10d3e5e909a',1,'python::plotting']]], - ['threepadsplit_994',['ThreePadSplit',['../namespacepython_1_1plotting.html#ae5bed13c05b2ee4a3b3eb9ea966c7f23',1,'python::plotting']]], - ['to_5fstring_995',['to_string',['../classch_1_1_observation.html#a6fca2ff7fd0dada3c1254a54b81617c2',1,'ch::Observation::to_string()'],['../classch_1_1_process.html#a71a3c904169a01cb6e79d0c342643ad8',1,'ch::Process::to_string()'],['../classch_1_1_systematic.html#a8d1cceb924cb5709221afef970778236',1,'ch::Systematic::to_string()']]], - ['token_996',['Token',['../classch_1_1_fn_timer_1_1_token.html#a1c853c1c56a90922270aeaa2727b1fab',1,'ch::FnTimer::Token']]], - ['toytgraphfromjson_997',['ToyTGraphFromJSON',['../namespacepython_1_1plotting.html#aaebc129aabfb0bceabb1759a251cf1c5',1,'python::plotting']]], - ['toytgraphfromjsonfile_998',['ToyTGraphFromJSONFile',['../namespacepython_1_1plotting.html#a9f3dc03b8c2f1b166a56c528e0713e8e',1,'python::plotting']]], - ['treetohist2d_999',['treeToHist2D',['../_plotting___contours_8h.html#aeb22bd9ab52fd5c4e6939a896eb971f7',1,'treeToHist2D(): Plotting_Contours.h'],['../namespacepython_1_1plotting.html#a0c281eca93efb5bae6b14237ca2c1c36',1,'python.plotting.treeToHist2D()']]], - ['tuple2string_1000',['Tuple2String',['../namespacech.html#a8240c3e729fa2ebaaaf1082ce6a15dd5',1,'ch']]], - ['twopadsplit_1001',['TwoPadSplit',['../_plotting_8h.html#aec780e8b3dd08b4a37dd94abc30f42c0',1,'TwoPadSplit(): Plotting.h'],['../namespacepython_1_1plotting.html#a42ec9d87c1a106fa4bb6707a6b490846',1,'python.plotting.TwoPadSplit()']]], - ['twopadsplitcolumns_1002',['TwoPadSplitColumns',['../namespacepython_1_1plotting.html#a3e72f7cb7088669f044870a43cd191fc',1,'python::plotting']]], - ['type_1003',['type',['../classch_1_1_systematic.html#a2c91f65744afb7460bfffdf2a4987196',1,'ch::Systematic']]] + ['tdrgrid_904',['TdrGrid',['../_plotting___style_8h.html#a0164a79c56b52dcd1963f0c015067238',1,'Plotting_Style.h']]], + ['tgraph2dfromtree_905',['TGraph2DFromTree',['../_plotting_8h.html#afd3d99fcf4abb2cc459734f0d7ce44e6',1,'Plotting.h']]], + ['tgraphfromtable_906',['TGraphFromTable',['../namespacech.html#a847fd9dc77ba21e35a6b531e1d26902a',1,'ch']]], + ['tgraphfromtree_907',['TGraphFromTree',['../_plotting_8h.html#a9359e5d70c59b3cd3ec03c4c7b449d1f',1,'Plotting.h']]], + ['th1f2data_908',['TH1F2Data',['../namespacech.html#a1347e48be022e182e17dfc421bf12680',1,'ch']]], + ['to_5fstring_909',['to_string',['../classch_1_1_observation.html#a6fca2ff7fd0dada3c1254a54b81617c2',1,'ch::Observation::to_string()'],['../classch_1_1_process.html#a71a3c904169a01cb6e79d0c342643ad8',1,'ch::Process::to_string()'],['../classch_1_1_systematic.html#a8d1cceb924cb5709221afef970778236',1,'ch::Systematic::to_string()']]], + ['token_910',['Token',['../classch_1_1_fn_timer_1_1_token.html#a1c853c1c56a90922270aeaa2727b1fab',1,'ch::FnTimer::Token']]], + ['treetohist2d_911',['treeToHist2D',['../_plotting___contours_8h.html#aeb22bd9ab52fd5c4e6939a896eb971f7',1,'Plotting_Contours.h']]], + ['tuple2string_912',['Tuple2String',['../namespacech.html#a8240c3e729fa2ebaaaf1082ce6a15dd5',1,'ch']]], + ['twopadsplit_913',['TwoPadSplit',['../_plotting_8h.html#aec780e8b3dd08b4a37dd94abc30f42c0',1,'Plotting.h']]], + ['type_914',['type',['../classch_1_1_systematic.html#a2c91f65744afb7460bfffdf2a4987196',1,'ch::Systematic']]] ]; diff --git a/search/functions_12.html b/search/functions_12.html index 16f6ecceb76..eb29d8f9a3f 100644 --- a/search/functions_12.html +++ b/search/functions_12.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_12.js b/search/functions_12.js index 711bc491208..daa2f4c806b 100644 --- a/search/functions_12.js +++ b/search/functions_12.js @@ -1,6 +1,6 @@ var searchData= [ - ['unitaxes_1004',['UnitAxes',['../_plotting_8h.html#a434781fa740199ba94f267d8263cc1a2',1,'Plotting.h']]], - ['updatejson_1005',['UpdateJson',['../namespacech.html#a53e0814284e64a6c0aa54c3a130c0a88',1,'ch']]], - ['updateparameters_1006',['UpdateParameters',['../classch_1_1_combine_harvester.html#a85ec2d316143e79cf690da7ff217eadb',1,'ch::CombineHarvester::UpdateParameters(std::vector< ch::Parameter > const &params)'],['../classch_1_1_combine_harvester.html#a4ee38f7674ca075beda81b979ba6aac0',1,'ch::CombineHarvester::UpdateParameters(RooFitResult const *fit)'],['../classch_1_1_combine_harvester.html#a2f6fa74fbaa78ec7f73855dc3473a5f2',1,'ch::CombineHarvester::UpdateParameters(RooFitResult const &fit)']]] + ['unitaxes_915',['UnitAxes',['../_plotting_8h.html#a434781fa740199ba94f267d8263cc1a2',1,'Plotting.h']]], + ['updatejson_916',['UpdateJson',['../namespacech.html#a53e0814284e64a6c0aa54c3a130c0a88',1,'ch']]], + ['updateparameters_917',['UpdateParameters',['../classch_1_1_combine_harvester.html#a85ec2d316143e79cf690da7ff217eadb',1,'ch::CombineHarvester::UpdateParameters(std::vector< ch::Parameter > const &params)'],['../classch_1_1_combine_harvester.html#a4ee38f7674ca075beda81b979ba6aac0',1,'ch::CombineHarvester::UpdateParameters(RooFitResult const *fit)'],['../classch_1_1_combine_harvester.html#a2f6fa74fbaa78ec7f73855dc3473a5f2',1,'ch::CombineHarvester::UpdateParameters(RooFitResult const &fit)']]] ]; diff --git a/search/functions_13.html b/search/functions_13.html index a552a4f2d12..3da2ea69cff 100644 --- a/search/functions_13.html +++ b/search/functions_13.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_13.js b/search/functions_13.js index 90cf7da71a0..b64922bf8fb 100644 --- a/search/functions_13.js +++ b/search/functions_13.js @@ -1,15 +1,15 @@ var searchData= [ - ['val_1007',['val',['../classch_1_1_parameter.html#ae395590d5d8f257af2068284462352ed',1,'ch::Parameter']]], - ['vald_1008',['ValD',['../classch_1_1syst_1_1_syst_map.html#a3ac1f15dbce16900fe5812f2f7e44648',1,'ch::syst::SystMap::ValD()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a7799cc4fcf45999de8bad030b91be9f1',1,'ch::syst::SystMapAsymm::ValD()'],['../classch_1_1syst_1_1_syst_map_func.html#a43b53ef01e3c293030039e6bb2f960d4',1,'ch::syst::SystMapFunc::ValD()']]], - ['validatecards_1009',['ValidateCards',['../namespacech.html#a879dedf45db74da348f2571492a280d2',1,'ch']]], - ['validateshapetemplates_1010',['ValidateShapeTemplates',['../namespacech.html#a1734a00def15ba2ee51c28197176548e',1,'ch::ValidateShapeTemplates(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a110f24bc749763a04ea6c9fbd909fde8',1,'ch::ValidateShapeTemplates(CombineHarvester &cb)']]], - ['validateshapeuncertaintydirection_1011',['ValidateShapeUncertaintyDirection',['../namespacech.html#a2e81a1feb11ba3255909526f90bbe7da',1,'ch::ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#aab5d6bfe23a9535399ea8ab48a3f223a',1,'ch::ValidateShapeUncertaintyDirection(CombineHarvester &cb)']]], - ['valsfromrange_1012',['ValsFromRange',['../namespacech.html#aafb5cab1f237067be3553e893ca0a7b9',1,'ch']]], - ['valu_1013',['ValU',['../classch_1_1syst_1_1_syst_map.html#a849dd4da93492c2afd51b31bd3a745f7',1,'ch::syst::SystMap::ValU()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ae4569458bdbdd7a21423e235e160683f',1,'ch::syst::SystMapAsymm::ValU()'],['../classch_1_1syst_1_1_syst_map_func.html#a2b1e2add77bcc6e0513965e4722d080e',1,'ch::syst::SystMapFunc::ValU()']]], - ['value_5fd_1014',['value_d',['../classch_1_1_systematic.html#ac0438bd51a527d0b2c1a70dd303ff4c3',1,'ch::Systematic']]], - ['value_5fu_1015',['value_u',['../classch_1_1_systematic.html#a1b40f502a9e5343cc1947bf452cd80d5',1,'ch::Systematic']]], - ['variablerebin_1016',['VariableRebin',['../classch_1_1_combine_harvester.html#a9ec4406a5a327d11af6257be20865b2a',1,'ch::CombineHarvester']]], - ['vars_1017',['vars',['../classch_1_1_parameter.html#a51f57bf4e727f2024da96a2ae2e5cf76',1,'ch::Parameter']]], - ['verbosity_1018',['Verbosity',['../classch_1_1_combine_harvester.html#ac66fa8f787cb9e9d00435b8d5ef20aeb',1,'ch::CombineHarvester']]] + ['val_918',['val',['../classch_1_1_parameter.html#ae395590d5d8f257af2068284462352ed',1,'ch::Parameter']]], + ['vald_919',['ValD',['../classch_1_1syst_1_1_syst_map.html#a3ac1f15dbce16900fe5812f2f7e44648',1,'ch::syst::SystMap::ValD()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a7799cc4fcf45999de8bad030b91be9f1',1,'ch::syst::SystMapAsymm::ValD()'],['../classch_1_1syst_1_1_syst_map_func.html#a43b53ef01e3c293030039e6bb2f960d4',1,'ch::syst::SystMapFunc::ValD()']]], + ['validatecards_920',['ValidateCards',['../namespacech.html#a879dedf45db74da348f2571492a280d2',1,'ch']]], + ['validateshapetemplates_921',['ValidateShapeTemplates',['../namespacech.html#a110f24bc749763a04ea6c9fbd909fde8',1,'ch::ValidateShapeTemplates(CombineHarvester &cb)'],['../namespacech.html#a1734a00def15ba2ee51c28197176548e',1,'ch::ValidateShapeTemplates(CombineHarvester &cb, json &jsobj)']]], + ['validateshapeuncertaintydirection_922',['ValidateShapeUncertaintyDirection',['../namespacech.html#aab5d6bfe23a9535399ea8ab48a3f223a',1,'ch::ValidateShapeUncertaintyDirection(CombineHarvester &cb)'],['../namespacech.html#a2e81a1feb11ba3255909526f90bbe7da',1,'ch::ValidateShapeUncertaintyDirection(CombineHarvester &cb, json &jsobj)']]], + ['valsfromrange_923',['ValsFromRange',['../namespacech.html#aafb5cab1f237067be3553e893ca0a7b9',1,'ch']]], + ['valu_924',['ValU',['../classch_1_1syst_1_1_syst_map_func.html#a2b1e2add77bcc6e0513965e4722d080e',1,'ch::syst::SystMapFunc::ValU()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ae4569458bdbdd7a21423e235e160683f',1,'ch::syst::SystMapAsymm::ValU()'],['../classch_1_1syst_1_1_syst_map.html#a849dd4da93492c2afd51b31bd3a745f7',1,'ch::syst::SystMap::ValU()']]], + ['value_5fd_925',['value_d',['../classch_1_1_systematic.html#ac0438bd51a527d0b2c1a70dd303ff4c3',1,'ch::Systematic']]], + ['value_5fu_926',['value_u',['../classch_1_1_systematic.html#a1b40f502a9e5343cc1947bf452cd80d5',1,'ch::Systematic']]], + ['variablerebin_927',['VariableRebin',['../classch_1_1_combine_harvester.html#a9ec4406a5a327d11af6257be20865b2a',1,'ch::CombineHarvester']]], + ['vars_928',['vars',['../classch_1_1_parameter.html#a51f57bf4e727f2024da96a2ae2e5cf76',1,'ch::Parameter']]], + ['verbosity_929',['Verbosity',['../classch_1_1_combine_harvester.html#ac66fa8f787cb9e9d00435b8d5ef20aeb',1,'ch::CombineHarvester']]] ]; diff --git a/search/functions_14.html b/search/functions_14.html index 97f0dcb8ba2..29237b44cd0 100644 --- a/search/functions_14.html +++ b/search/functions_14.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_14.js b/search/functions_14.js index adc4d452b67..e964e45d425 100644 --- a/search/functions_14.js +++ b/search/functions_14.js @@ -1,8 +1,8 @@ var searchData= [ - ['workspacename_1019',['WorkspaceName',['../structch_1_1_hist_mapping.html#af30077263ea939755c0f6c5e57acf452',1,'ch::HistMapping']]], - ['workspaceobj_1020',['WorkspaceObj',['../structch_1_1_hist_mapping.html#a7805e6cd58e35394a0c867fa11a0b335',1,'ch::HistMapping']]], - ['writecards_1021',['WriteCards',['../classch_1_1_card_writer.html#a4cc19951d42fb8721be76a5e26cbf0c6',1,'ch::CardWriter']]], - ['writedatacard_1022',['WriteDatacard',['../classch_1_1_combine_harvester.html#a63255dd5ec491fa12857bc63b4174e92',1,'ch::CombineHarvester::WriteDatacard(std::string const &name, std::string const &root_file)'],['../classch_1_1_combine_harvester.html#a224d461aa1eec4a6cf2a3b915469d228',1,'ch::CombineHarvester::WriteDatacard(std::string const &name, TFile &root_file)'],['../classch_1_1_combine_harvester.html#a32e3454b8734a04374efef473b1db110',1,'ch::CombineHarvester::WriteDatacard(std::string const &name)']]], - ['writetotfile_1023',['WriteToTFile',['../namespacech.html#a06e7ae02d1abed286e7184a7e7626529',1,'ch']]] + ['workspacename_930',['WorkspaceName',['../structch_1_1_hist_mapping.html#af30077263ea939755c0f6c5e57acf452',1,'ch::HistMapping']]], + ['workspaceobj_931',['WorkspaceObj',['../structch_1_1_hist_mapping.html#a7805e6cd58e35394a0c867fa11a0b335',1,'ch::HistMapping']]], + ['writecards_932',['WriteCards',['../classch_1_1_card_writer.html#a4cc19951d42fb8721be76a5e26cbf0c6',1,'ch::CardWriter']]], + ['writedatacard_933',['WriteDatacard',['../classch_1_1_combine_harvester.html#a63255dd5ec491fa12857bc63b4174e92',1,'ch::CombineHarvester::WriteDatacard(std::string const &name, std::string const &root_file)'],['../classch_1_1_combine_harvester.html#a224d461aa1eec4a6cf2a3b915469d228',1,'ch::CombineHarvester::WriteDatacard(std::string const &name, TFile &root_file)'],['../classch_1_1_combine_harvester.html#a32e3454b8734a04374efef473b1db110',1,'ch::CombineHarvester::WriteDatacard(std::string const &name)']]], + ['writetotfile_934',['WriteToTFile',['../namespacech.html#a06e7ae02d1abed286e7184a7e7626529',1,'ch']]] ]; diff --git a/search/functions_15.html b/search/functions_15.html index fbd092e6d49..6d5decd7051 100644 --- a/search/functions_15.html +++ b/search/functions_15.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_15.js b/search/functions_15.js index 4b3a8ba4fa7..7cc75d8525d 100644 --- a/search/functions_15.js +++ b/search/functions_15.js @@ -1,5 +1,5 @@ var searchData= [ - ['zerobins_1024',['ZeroBins',['../classch_1_1_combine_harvester.html#a04ff1eb7d52a251110bef09b3f7be2c4',1,'ch::CombineHarvester']]], - ['zeronegativebins_1025',['ZeroNegativeBins',['../namespacech.html#ad95e5447b9cb0676428f86b1fd018a97',1,'ch']]] + ['zerobins_935',['ZeroBins',['../classch_1_1_combine_harvester.html#a04ff1eb7d52a251110bef09b3f7be2c4',1,'ch::CombineHarvester']]], + ['zeronegativebins_936',['ZeroNegativeBins',['../namespacech.html#ad95e5447b9cb0676428f86b1fd018a97',1,'ch']]] ]; diff --git a/search/functions_16.html b/search/functions_16.html index d1482ef962d..5aed7d093df 100644 --- a/search/functions_16.html +++ b/search/functions_16.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_16.js b/search/functions_16.js index 75dbd0ec034..181f979822e 100644 --- a/search/functions_16.js +++ b/search/functions_16.js @@ -1,11 +1,11 @@ var searchData= [ - ['_7ecombineharvester_1026',['~CombineHarvester',['../classch_1_1_combine_harvester.html#a71a57cb6de8ede0b1e8ac51d73571a2a',1,'ch::CombineHarvester']]], - ['_7efntimer_1027',['~FnTimer',['../classch_1_1_fn_timer.html#ad250e7cf97d91e1fe83d1d861a2fc7ab',1,'ch::FnTimer']]], - ['_7eobject_1028',['~Object',['../classch_1_1_object.html#ae38bc7ac84c1624c0d8145fa67ea8d85',1,'ch::Object']]], - ['_7eobservation_1029',['~Observation',['../classch_1_1_observation.html#abd0305355e2b59895fa3ee52bb89ec43',1,'ch::Observation']]], - ['_7eparameter_1030',['~Parameter',['../classch_1_1_parameter.html#a23a0cca56da830a0bc521f5980de371c',1,'ch::Parameter']]], - ['_7eprocess_1031',['~Process',['../classch_1_1_process.html#a23ead7f55f163bdb9cb9b1a3de30085d',1,'ch::Process']]], - ['_7esystematic_1032',['~Systematic',['../classch_1_1_systematic.html#ad58316d4253223444aa64d0d67ef4af5',1,'ch::Systematic']]], - ['_7etoken_1033',['~Token',['../classch_1_1_fn_timer_1_1_token.html#a8f09c19cbce557ae83281e8a0c36c8e9',1,'ch::FnTimer::Token']]] + ['_7ecombineharvester_937',['~CombineHarvester',['../classch_1_1_combine_harvester.html#a71a57cb6de8ede0b1e8ac51d73571a2a',1,'ch::CombineHarvester']]], + ['_7efntimer_938',['~FnTimer',['../classch_1_1_fn_timer.html#ad250e7cf97d91e1fe83d1d861a2fc7ab',1,'ch::FnTimer']]], + ['_7eobject_939',['~Object',['../classch_1_1_object.html#ae38bc7ac84c1624c0d8145fa67ea8d85',1,'ch::Object']]], + ['_7eobservation_940',['~Observation',['../classch_1_1_observation.html#abd0305355e2b59895fa3ee52bb89ec43',1,'ch::Observation']]], + ['_7eparameter_941',['~Parameter',['../classch_1_1_parameter.html#a23a0cca56da830a0bc521f5980de371c',1,'ch::Parameter']]], + ['_7eprocess_942',['~Process',['../classch_1_1_process.html#a23ead7f55f163bdb9cb9b1a3de30085d',1,'ch::Process']]], + ['_7esystematic_943',['~Systematic',['../classch_1_1_systematic.html#ad58316d4253223444aa64d0d67ef4af5',1,'ch::Systematic']]], + ['_7etoken_944',['~Token',['../classch_1_1_fn_timer_1_1_token.html#a8f09c19cbce557ae83281e8a0c36c8e9',1,'ch::FnTimer::Token']]] ]; diff --git a/search/functions_2.html b/search/functions_2.html index 07e3fdad44d..ca5aa10e6c8 100644 --- a/search/functions_2.html +++ b/search/functions_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_2.js b/search/functions_2.js index fc3513c3940..890ad6694c7 100644 --- a/search/functions_2.js +++ b/search/functions_2.js @@ -1,34 +1,36 @@ var searchData= [ - ['cardwriter_675',['CardWriter',['../classch_1_1_card_writer.html#ac6b92918c967a8177add4d72bfa44e90',1,'ch::CardWriter']]], - ['channel_676',['channel',['../classch_1_1_combine_harvester.html#af0aa39911df61ce140c97b13ffde77e9',1,'ch::CombineHarvester::channel()'],['../classch_1_1_object.html#af3647aa91e248e08fec6aabb7422af7f',1,'ch::Object::channel()']]], - ['channel_5fset_677',['channel_set',['../classch_1_1_combine_harvester.html#aa8d68c05c6be27db6568098a15f07e5c',1,'ch::CombineHarvester']]], - ['checkemptybins_678',['CheckEmptyBins',['../namespacech.html#a8a3f27453e5ff2a690defd0e9af30ba1',1,'ch::CheckEmptyBins(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a17c9ada5f6dff7d80556d45f6fc15711',1,'ch::CheckEmptyBins(CombineHarvester &cb)']]], - ['checkemptyshapes_679',['CheckEmptyShapes',['../namespacech.html#a8c2dcef8ee437178ff45671478c475c0',1,'ch::CheckEmptyShapes(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a7369fb27dd88881fe886abb67447cbc0',1,'ch::CheckEmptyShapes(CombineHarvester &cb)']]], - ['checknormeff_680',['CheckNormEff',['../namespacech.html#a36b4ff13e4987621615e47bd1c026993',1,'ch::CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)'],['../namespacech.html#aca65f362f9126cb2b200fff5356a9d59',1,'ch::CheckNormEff(CombineHarvester &cb, double maxNormEff)']]], - ['checksizeofshapeeffect_681',['CheckSizeOfShapeEffect',['../namespacech.html#a86955210d56802afd6080eda66bd4fa6',1,'ch::CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)'],['../namespacech.html#a3ea8e5201690fc0aca17b034fa3ba527',1,'ch::CheckSizeOfShapeEffect(CombineHarvester &cb)']]], - ['checksmallsignals_682',['CheckSmallSignals',['../namespacech.html#aa86c0751d41d0c533f51fe249468872a',1,'ch::CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)'],['../namespacech.html#a2fac772d6886087f8f4f77a711369ec9',1,'ch::CheckSmallSignals(CombineHarvester &cb, double minSigFrac)']]], - ['cleardatacardlinesatend_683',['ClearDatacardLinesAtEnd',['../classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce',1,'ch::CombineHarvester']]], - ['clonedscaledshape_684',['ClonedScaledShape',['../classch_1_1_observation.html#a4ab5df5543cfe3ce7df385cb40e16d35',1,'ch::Observation::ClonedScaledShape()'],['../classch_1_1_process.html#a3818d45b542fe058e4159fe0a30d2fba',1,'ch::Process::ClonedScaledShape()']]], - ['clonedshape_685',['ClonedShape',['../classch_1_1_observation.html#a759deffcb06bd3e3bf06c1823e244144',1,'ch::Observation::ClonedShape()'],['../classch_1_1_process.html#af8d6574f338e05cdc4f4e647e9ae9d6c',1,'ch::Process::ClonedShape()']]], - ['clonedshaped_686',['ClonedShapeD',['../classch_1_1_systematic.html#a3b12feb2eceaa601c4b12e0922719d97',1,'ch::Systematic']]], - ['clonedshapeu_687',['ClonedShapeU',['../classch_1_1_systematic.html#a29c3a43b54fbf4a3e00975146e028251',1,'ch::Systematic']]], - ['cloneobs_688',['CloneObs',['../namespacech.html#a30449f890154e9002086dbfacc74d85c',1,'ch']]], - ['cloneprocs_689',['CloneProcs',['../namespacech.html#a25bd105268bf5e23e7c895329938aa0e',1,'ch']]], - ['cloneprocsandsysts_690',['CloneProcsAndSysts',['../namespacech.html#a27eee114b589ec9869ea3d34863e41fe',1,'ch']]], - ['clonesysts_691',['CloneSysts',['../namespacech.html#aa9eced43e8f467639564c24f2203f818',1,'ch']]], - ['cmshistfuncfactory_692',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7',1,'ch::CMSHistFuncFactory']]], - ['combineharvester_693',['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)']]], - ['contains_694',['Contains',['../classch_1_1syst_1_1_syst_map.html#a2e2a5300457329d7df0237702b533532',1,'ch::syst::SystMap::Contains()'],['../classch_1_1syst_1_1_syst_map_asymm.html#aa764f88f9da4813544264ea98d6b173d',1,'ch::syst::SystMapAsymm::Contains()'],['../classch_1_1syst_1_1_syst_map_func.html#a16c9205967690b0358db1ee501e3096b',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)']]], - ['contains_5frgx_695',['contains_rgx',['../namespacech.html#a7778c42ab19640ea360293c20bfa24f5',1,'ch']]], - ['contour2d_696',['contour2D',['../_plotting___contours_8h.html#a7181c71a4e6068cd9e7861d785fd1ecb',1,'Plotting_Contours.h']]], - ['contourfromth2_697',['contourFromTH2',['../_plotting___contours_8h.html#abaa7877c21f5ceb7376d212787ee3964',1,'contourFromTH2(): Plotting_Contours.h'],['../namespacepython_1_1plotting.html#af2b0eeb9509ca109461453598cd3aae8',1,'python.plotting.contourFromTH2()']]], - ['cp_698',['cp',['../classch_1_1_combine_harvester.html#ade0f7c161d078a189404a274b93336d2',1,'ch::CombineHarvester']]], - ['createaxishist_699',['CreateAxisHist',['../_plotting_8h.html#ad137f606f878b7d25aeb2dde1b970ce9',1,'CreateAxisHist(TH1 *src, double xmin=0, double xmax=-1): Plotting.h'],['../_plotting_8h.html#ac4830bcc5449ac3275bf66ac389fe4ee',1,'CreateAxisHist(TGraph *src, bool at_limits): Plotting.h'],['../namespacepython_1_1plotting.html#ac86dc839c396ece76049116769cce181',1,'python.plotting.CreateAxisHist()']]], - ['createaxishists_700',['CreateAxisHists',['../_plotting_8h.html#aaeb0dadc50435965db936e967dde2799',1,'CreateAxisHists(unsigned n, TH1 *src, double xmin=0, double xmax=-1): Plotting.h'],['../_plotting_8h.html#a6c102d23f1264e7b30aed6f76ce6c740',1,'CreateAxisHists(unsigned n, TGraph *src, bool at_limits): Plotting.h'],['../namespacepython_1_1plotting.html#a06656a23374162431db40f47baea5f76',1,'python.plotting.CreateAxisHists()']]], - ['createdirectories_701',['CreateDirectories',['../classch_1_1_card_writer.html#a1c214a68a95a4d2f09dbe45a033cce16',1,'ch::CardWriter']]], - ['createparameterifempty_702',['CreateParameterIfEmpty',['../classch_1_1_combine_harvester.html#a2eefb78479b655130b6cf5710bdea33c',1,'ch::CombineHarvester']]], - ['createtransparentcolor_703',['CreateTransparentColor',['../_plotting_8h.html#addb5de4f8e6a8a5fa83d7d824d3d9934',1,'CreateTransparentColor(): Plotting.h'],['../namespacepython_1_1plotting.html#a62481c509fe69ac9d6d61aa69b17dc8e',1,'python.plotting.CreateTransparentColor()']]], - ['cross_704',['cross',['../namespacech_1_1syst_1_1detail.html#a67a602daf8c00931aea63667430d94a8',1,'ch::syst::detail']]], - ['cross_5fimp_705',['cross_imp',['../namespacech_1_1syst_1_1detail.html#a54c49b65dbe6b3a81b35285e8bf6e301',1,'ch::syst::detail::cross_imp(F f)'],['../namespacech_1_1syst_1_1detail.html#a3bf4d0fb6e19a9de3255b6741b5274d7',1,'ch::syst::detail::cross_imp(F f, std::vector< H > const &h, std::vector< Ts > const &... t)']]] + ['cardwriter_631',['CardWriter',['../classch_1_1_card_writer.html#ac6b92918c967a8177add4d72bfa44e90',1,'ch::CardWriter']]], + ['channel_632',['channel',['../classch_1_1_combine_harvester.html#af0aa39911df61ce140c97b13ffde77e9',1,'ch::CombineHarvester::channel()'],['../classch_1_1_object.html#af3647aa91e248e08fec6aabb7422af7f',1,'ch::Object::channel()']]], + ['channel_5fset_633',['channel_set',['../classch_1_1_combine_harvester.html#aa8d68c05c6be27db6568098a15f07e5c',1,'ch::CombineHarvester']]], + ['checkemptybins_634',['CheckEmptyBins',['../namespacech.html#a17c9ada5f6dff7d80556d45f6fc15711',1,'ch::CheckEmptyBins(CombineHarvester &cb)'],['../namespacech.html#a8a3f27453e5ff2a690defd0e9af30ba1',1,'ch::CheckEmptyBins(CombineHarvester &cb, json &jsobj)']]], + ['checkemptyshapes_635',['CheckEmptyShapes',['../namespacech.html#a7369fb27dd88881fe886abb67447cbc0',1,'ch::CheckEmptyShapes(CombineHarvester &cb)'],['../namespacech.html#a8c2dcef8ee437178ff45671478c475c0',1,'ch::CheckEmptyShapes(CombineHarvester &cb, json &jsobj)']]], + ['checknormeff_636',['CheckNormEff',['../namespacech.html#aca65f362f9126cb2b200fff5356a9d59',1,'ch::CheckNormEff(CombineHarvester &cb, double maxNormEff)'],['../namespacech.html#a36b4ff13e4987621615e47bd1c026993',1,'ch::CheckNormEff(CombineHarvester &cb, double maxNormEff, json &jsobj)']]], + ['checksizeofshapeeffect_637',['CheckSizeOfShapeEffect',['../namespacech.html#a3ea8e5201690fc0aca17b034fa3ba527',1,'ch::CheckSizeOfShapeEffect(CombineHarvester &cb)'],['../namespacech.html#a86955210d56802afd6080eda66bd4fa6',1,'ch::CheckSizeOfShapeEffect(CombineHarvester &cb, json &jsobj)']]], + ['checksmallsignals_638',['CheckSmallSignals',['../namespacech.html#a2fac772d6886087f8f4f77a711369ec9',1,'ch::CheckSmallSignals(CombineHarvester &cb, double minSigFrac)'],['../namespacech.html#aa86c0751d41d0c533f51fe249468872a',1,'ch::CheckSmallSignals(CombineHarvester &cb, double minSigFrac, json &jsobj)']]], + ['cleardatacardlinesatend_639',['ClearDatacardLinesAtEnd',['../classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce',1,'ch::CombineHarvester']]], + ['clonedscaledshape_640',['ClonedScaledShape',['../classch_1_1_observation.html#a4ab5df5543cfe3ce7df385cb40e16d35',1,'ch::Observation::ClonedScaledShape()'],['../classch_1_1_process.html#a3818d45b542fe058e4159fe0a30d2fba',1,'ch::Process::ClonedScaledShape() const']]], + ['clonedshape_641',['ClonedShape',['../classch_1_1_process.html#af8d6574f338e05cdc4f4e647e9ae9d6c',1,'ch::Process::ClonedShape()'],['../classch_1_1_observation.html#a759deffcb06bd3e3bf06c1823e244144',1,'ch::Observation::ClonedShape()']]], + ['clonedshaped_642',['ClonedShapeD',['../classch_1_1_systematic.html#a3b12feb2eceaa601c4b12e0922719d97',1,'ch::Systematic']]], + ['clonedshapeu_643',['ClonedShapeU',['../classch_1_1_systematic.html#a29c3a43b54fbf4a3e00975146e028251',1,'ch::Systematic']]], + ['cloneobs_644',['CloneObs',['../namespacech.html#a30449f890154e9002086dbfacc74d85c',1,'ch']]], + ['cloneprocs_645',['CloneProcs',['../namespacech.html#a25bd105268bf5e23e7c895329938aa0e',1,'ch']]], + ['cloneprocsandsysts_646',['CloneProcsAndSysts',['../namespacech.html#a27eee114b589ec9869ea3d34863e41fe',1,'ch']]], + ['clonesysts_647',['CloneSysts',['../namespacech.html#aa9eced43e8f467639564c24f2203f818',1,'ch']]], + ['cmshistfuncfactory_648',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7',1,'ch::CMSHistFuncFactory']]], + ['combineharvester_649',['CombineHarvester',['../classch_1_1_combine_harvester.html#aa7f131550d71b656d7643c32bc6e5673',1,'ch::CombineHarvester::CombineHarvester(CombineHarvester &&other)'],['../classch_1_1_combine_harvester.html#aa80be2f3c50f226ec74bd2f0249af8f1',1,'ch::CombineHarvester::CombineHarvester(CombineHarvester const &other)'],['../classch_1_1_combine_harvester.html#a359a11f3f6f9ab27fd7f047a6bf31ae8',1,'ch::CombineHarvester::CombineHarvester()']]], + ['contains_650',['contains',['../namespacech.html#a7d0976239046f20281fb0bd2bd2c3625',1,'ch']]], + ['contains_651',['Contains',['../classch_1_1syst_1_1_syst_map_func.html#a16c9205967690b0358db1ee501e3096b',1,'ch::syst::SystMapFunc::Contains()'],['../classch_1_1syst_1_1_syst_map_asymm.html#aa764f88f9da4813544264ea98d6b173d',1,'ch::syst::SystMapAsymm::Contains()'],['../classch_1_1syst_1_1_syst_map.html#a2e2a5300457329d7df0237702b533532',1,'ch::syst::SystMap::Contains()']]], + ['contains_652',['contains',['../namespacech.html#a961ef6b98124198d1648868011bc0153',1,'ch']]], + ['contains_5frgx_653',['contains_rgx',['../namespacech.html#a7778c42ab19640ea360293c20bfa24f5',1,'ch']]], + ['contour2d_654',['contour2D',['../_plotting___contours_8h.html#a7181c71a4e6068cd9e7861d785fd1ecb',1,'Plotting_Contours.h']]], + ['contourfromth2_655',['contourFromTH2',['../_plotting___contours_8h.html#abaa7877c21f5ceb7376d212787ee3964',1,'Plotting_Contours.h']]], + ['cp_656',['cp',['../classch_1_1_combine_harvester.html#ade0f7c161d078a189404a274b93336d2',1,'ch::CombineHarvester']]], + ['createaxishist_657',['CreateAxisHist',['../_plotting_8h.html#ad137f606f878b7d25aeb2dde1b970ce9',1,'CreateAxisHist(TH1 *src, double xmin=0, double xmax=-1): Plotting.h'],['../_plotting_8h.html#ac4830bcc5449ac3275bf66ac389fe4ee',1,'CreateAxisHist(TGraph *src, bool at_limits): Plotting.h']]], + ['createaxishists_658',['CreateAxisHists',['../_plotting_8h.html#aaeb0dadc50435965db936e967dde2799',1,'CreateAxisHists(unsigned n, TH1 *src, double xmin=0, double xmax=-1): Plotting.h'],['../_plotting_8h.html#a6c102d23f1264e7b30aed6f76ce6c740',1,'CreateAxisHists(unsigned n, TGraph *src, bool at_limits): Plotting.h']]], + ['createdirectories_659',['CreateDirectories',['../classch_1_1_card_writer.html#a1c214a68a95a4d2f09dbe45a033cce16',1,'ch::CardWriter']]], + ['createparameterifempty_660',['CreateParameterIfEmpty',['../classch_1_1_combine_harvester.html#a2eefb78479b655130b6cf5710bdea33c',1,'ch::CombineHarvester']]], + ['createtransparentcolor_661',['CreateTransparentColor',['../_plotting_8h.html#addb5de4f8e6a8a5fa83d7d824d3d9934',1,'Plotting.h']]], + ['cross_662',['cross',['../namespacech_1_1syst_1_1detail.html#a67a602daf8c00931aea63667430d94a8',1,'ch::syst::detail']]], + ['cross_5fimp_663',['cross_imp',['../namespacech_1_1syst_1_1detail.html#a54c49b65dbe6b3a81b35285e8bf6e301',1,'ch::syst::detail::cross_imp(F f)'],['../namespacech_1_1syst_1_1detail.html#a3bf4d0fb6e19a9de3255b6741b5274d7',1,'ch::syst::detail::cross_imp(F f, std::vector< H > const &h, std::vector< Ts > const &... t)']]] ]; diff --git a/search/functions_3.html b/search/functions_3.html index 40bd389ee14..d79f55b8e3b 100644 --- a/search/functions_3.html +++ b/search/functions_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_3.js b/search/functions_3.js index 0f3775d0877..48d6c13f3a9 100644 --- a/search/functions_3.js +++ b/search/functions_3.js @@ -1,15 +1,12 @@ var searchData= [ - ['data_706',['data',['../classch_1_1_combine_harvester.html#a463bab1fa1cc7098f35d82c78a10fb9d',1,'ch::CombineHarvester::data()'],['../classch_1_1_observation.html#a6cfe0c1aaed17a7a1784f3a0b0c4ef2c',1,'ch::Observation::data()'],['../classch_1_1_process.html#a80aedc9343ad988ca0908b21367bd3f0',1,'ch::Process::data()']]], - ['data_5fd_707',['data_d',['../classch_1_1_systematic.html#a2932a2add1e82602cfea45af6ff2f953',1,'ch::Systematic']]], - ['data_5fu_708',['data_u',['../classch_1_1_systematic.html#ab3faed43e3b15b998560f271d4068182',1,'ch::Systematic']]], - ['deep_709',['deep',['../classch_1_1_combine_harvester.html#acbc55586d0cc9e8dc83f0396157d4b75',1,'ch::CombineHarvester']]], - ['delete_5fattribute_710',['delete_attribute',['../classch_1_1_object.html#afe324e1fe370f7804a30e84da0a67556',1,'ch::Object']]], - ['drawcmslogo_711',['DrawCMSLogo',['../_plotting_8h.html#ac9a2d10dbb78251b4757aba40f73fa68',1,'DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX, float relPosX, float relPosY, float relExtraDY): Plotting.h'],['../_plotting_8h.html#a99344cc5028c90aaafacea9ec5eab9d2',1,'DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX): Plotting.h'],['../namespacepython_1_1plotting.html#a2f37093b1828f3553adf6c59e9a86aa4',1,'python.plotting.DrawCMSLogo()']]], - ['drawcontours_712',['drawContours',['../_plotting___contours_8h.html#afcb8faa65f5a499825189a7cdd745b9e',1,'Plotting_Contours.h']]], - ['drawhorizontalline_713',['DrawHorizontalLine',['../_plotting_8h.html#aa8adc566a12b3c090d1e1ff3330f7c98',1,'DrawHorizontalLine(): Plotting.h'],['../namespacepython_1_1plotting.html#aa59088e7ab459b7d23bbc043dc6be97a',1,'python.plotting.DrawHorizontalLine()']]], - ['drawlimitband_714',['DrawLimitBand',['../namespacepython_1_1plotting.html#a2c4bc7ae087717eb744bacdb14207e63',1,'python::plotting']]], - ['drawtitle_715',['DrawTitle',['../_plotting_8h.html#a39767958a52b4be5820816be7b1bb9bf',1,'DrawTitle(): Plotting.h'],['../namespacepython_1_1plotting.html#ae8b7215feda9add6dfa50619eb441857',1,'python.plotting.DrawTitle()']]], - ['drawverticalband_716',['DrawVerticalBand',['../namespacepython_1_1plotting.html#a1958833c592d44945a72957e87089cbf',1,'python::plotting']]], - ['drawverticalline_717',['DrawVerticalLine',['../namespacepython_1_1plotting.html#a42fdb746289c7f95685cbc0182f140e1',1,'python::plotting']]] + ['data_664',['data',['../classch_1_1_combine_harvester.html#a463bab1fa1cc7098f35d82c78a10fb9d',1,'ch::CombineHarvester::data()'],['../classch_1_1_observation.html#a6cfe0c1aaed17a7a1784f3a0b0c4ef2c',1,'ch::Observation::data()'],['../classch_1_1_process.html#a80aedc9343ad988ca0908b21367bd3f0',1,'ch::Process::data()']]], + ['data_5fd_665',['data_d',['../classch_1_1_systematic.html#a2932a2add1e82602cfea45af6ff2f953',1,'ch::Systematic']]], + ['data_5fu_666',['data_u',['../classch_1_1_systematic.html#ab3faed43e3b15b998560f271d4068182',1,'ch::Systematic']]], + ['deep_667',['deep',['../classch_1_1_combine_harvester.html#acbc55586d0cc9e8dc83f0396157d4b75',1,'ch::CombineHarvester']]], + ['delete_5fattribute_668',['delete_attribute',['../classch_1_1_object.html#afe324e1fe370f7804a30e84da0a67556',1,'ch::Object']]], + ['drawcmslogo_669',['DrawCMSLogo',['../_plotting_8h.html#ac9a2d10dbb78251b4757aba40f73fa68',1,'DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX, float relPosX, float relPosY, float relExtraDY): Plotting.h'],['../_plotting_8h.html#a99344cc5028c90aaafacea9ec5eab9d2',1,'DrawCMSLogo(TPad *pad, TString cmsText, TString extraText, int iPosX): Plotting.h']]], + ['drawcontours_670',['drawContours',['../_plotting___contours_8h.html#afcb8faa65f5a499825189a7cdd745b9e',1,'Plotting_Contours.h']]], + ['drawhorizontalline_671',['DrawHorizontalLine',['../_plotting_8h.html#aa8adc566a12b3c090d1e1ff3330f7c98',1,'Plotting.h']]], + ['drawtitle_672',['DrawTitle',['../_plotting_8h.html#a39767958a52b4be5820816be7b1bb9bf',1,'Plotting.h']]] ]; diff --git a/search/functions_4.html b/search/functions_4.html index 8a4df4cdcde..1657cad0d42 100644 --- a/search/functions_4.html +++ b/search/functions_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_4.js b/search/functions_4.js index a1866e235c4..962f05b355f 100644 --- a/search/functions_4.js +++ b/search/functions_4.js @@ -1,15 +1,15 @@ var searchData= [ - ['era_718',['era',['../classch_1_1_combine_harvester.html#a4bb3afda2ccc54a1c259be6b715ae8e5',1,'ch::CombineHarvester::era()'],['../classch_1_1_object.html#ac45068d2a56b7142f30ee43c8bc3366b',1,'ch::Object::era()']]], - ['era_5fset_719',['era_set',['../classch_1_1_combine_harvester.html#a9f1ada299ed6d20f749cf10f589c25df',1,'ch::CombineHarvester']]], - ['erase_5fif_720',['erase_if',['../namespacech.html#a9e0d877cb39147fa1de5cdcb8eff2110',1,'ch']]], - ['err_5fd_721',['err_d',['../classch_1_1_parameter.html#a3ca540760eba83fa7867bf02315ba48d',1,'ch::Parameter']]], - ['err_5fu_722',['err_u',['../classch_1_1_parameter.html#a1cb6f7e522467a2090e4cc9fc86f5c25',1,'ch::Parameter']]], - ['extractdata_723',['ExtractData',['../classch_1_1_combine_harvester.html#ac40e961ea428fa6411ec8e3b6ddeadef',1,'ch::CombineHarvester']]], - ['extractfitparameters_724',['ExtractFitParameters',['../namespacech.html#a49fb1eb0d277893e0f6a9cc099d4cf28',1,'ch']]], - ['extractjsonfromfile_725',['ExtractJsonFromFile',['../namespacech.html#af6162c2c3534475d55453bbdb86b13a4',1,'ch']]], - ['extractjsonfromstring_726',['ExtractJsonFromString',['../namespacech.html#a39e16e4393f4f945edfa540c3751cae8',1,'ch']]], - ['extractpdfs_727',['ExtractPdfs',['../classch_1_1_combine_harvester.html#aff8e163ca0abe844603e676d142986a0',1,'ch::CombineHarvester']]], - ['extractsampledfitparameters_728',['ExtractSampledFitParameters',['../namespacech.html#a9ba092c0c88fd0a122b927b83d91a4de',1,'ch']]], - ['extractshapes_729',['ExtractShapes',['../classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0',1,'ch::CombineHarvester']]] + ['era_673',['era',['../classch_1_1_combine_harvester.html#a4bb3afda2ccc54a1c259be6b715ae8e5',1,'ch::CombineHarvester::era()'],['../classch_1_1_object.html#ac45068d2a56b7142f30ee43c8bc3366b',1,'ch::Object::era()']]], + ['era_5fset_674',['era_set',['../classch_1_1_combine_harvester.html#a9f1ada299ed6d20f749cf10f589c25df',1,'ch::CombineHarvester']]], + ['erase_5fif_675',['erase_if',['../namespacech.html#a9e0d877cb39147fa1de5cdcb8eff2110',1,'ch']]], + ['err_5fd_676',['err_d',['../classch_1_1_parameter.html#a3ca540760eba83fa7867bf02315ba48d',1,'ch::Parameter']]], + ['err_5fu_677',['err_u',['../classch_1_1_parameter.html#a1cb6f7e522467a2090e4cc9fc86f5c25',1,'ch::Parameter']]], + ['extractdata_678',['ExtractData',['../classch_1_1_combine_harvester.html#ac40e961ea428fa6411ec8e3b6ddeadef',1,'ch::CombineHarvester']]], + ['extractfitparameters_679',['ExtractFitParameters',['../namespacech.html#a49fb1eb0d277893e0f6a9cc099d4cf28',1,'ch']]], + ['extractjsonfromfile_680',['ExtractJsonFromFile',['../namespacech.html#af6162c2c3534475d55453bbdb86b13a4',1,'ch']]], + ['extractjsonfromstring_681',['ExtractJsonFromString',['../namespacech.html#a39e16e4393f4f945edfa540c3751cae8',1,'ch']]], + ['extractpdfs_682',['ExtractPdfs',['../classch_1_1_combine_harvester.html#aff8e163ca0abe844603e676d142986a0',1,'ch::CombineHarvester']]], + ['extractsampledfitparameters_683',['ExtractSampledFitParameters',['../namespacech.html#a9ba092c0c88fd0a122b927b83d91a4de',1,'ch']]], + ['extractshapes_684',['ExtractShapes',['../classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0',1,'ch::CombineHarvester']]] ]; diff --git a/search/functions_5.html b/search/functions_5.html index 2b983b21461..9301d6b9c17 100644 --- a/search/functions_5.html +++ b/search/functions_5.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_5.js b/search/functions_5.js index 9ea8efd4794..6ee1e00a22c 100644 --- a/search/functions_5.js +++ b/search/functions_5.js @@ -1,29 +1,23 @@ var searchData= [ - ['fastfillth2_730',['fastFillTH2',['../namespacepython_1_1plotting.html#a59730ba620dbb43bb688ab10f2479757',1,'python::plotting']]], - ['fillinvertedth2_731',['fillInvertedTH2',['../namespacepython_1_1plotting.html#a51c8979fbd3c58c8ea17353e410a6718',1,'python::plotting']]], - ['fillth2_732',['fillTH2',['../namespacepython_1_1plotting.html#a39e68474eaae8c5c0529d96e25aa698d',1,'python::plotting']]], - ['filterall_733',['FilterAll',['../classch_1_1_combine_harvester.html#aab08f8aee1553b76501ff1a4de0a716c',1,'ch::CombineHarvester']]], - ['filtercontaining_734',['FilterContaining',['../namespacech.html#a66828130e239590bca8112c89d68b653',1,'ch::FilterContaining(Input &in, Filter const &filter, Converter fn, bool cond)'],['../namespacech.html#af86af10e2226a6deb97ad890c1ac9f0b',1,'ch::FilterContaining(Input &in, Filter const &filter, Converter fn, Funcarg arg, bool cond)']]], - ['filtercontainingrgx_735',['FilterContainingRgx',['../namespacech.html#a281b148e8871f50f2c3269ab91b1a837',1,'ch::FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)'],['../namespacech.html#ab0a522713ffa93da18cb26132f875344',1,'ch::FilterContainingRgx(Input &in, Filter const &filter, Converter fn, Funcarg arg, bool cond)']]], - ['filtergraph_736',['FilterGraph',['../namespacepython_1_1plotting.html#aee54f1dc361284346c88192e1a060aad',1,'python::plotting']]], - ['filterobs_737',['FilterObs',['../classch_1_1_combine_harvester.html#a35f86a79305555fec0a89b825d1fab71',1,'ch::CombineHarvester']]], - ['filterprocs_738',['FilterProcs',['../classch_1_1_combine_harvester.html#aab6a698c192aa091178bbd8dfbd0266f',1,'ch::CombineHarvester']]], - ['filtersysts_739',['FilterSysts',['../classch_1_1_combine_harvester.html#a91821b9464ebaacb5b92be2b3bc794f8',1,'ch::CombineHarvester']]], - ['findaddpdf_740',['FindAddPdf',['../namespacech.html#a5a4aae941cd175bf6764ad6789b4df8c',1,'ch']]], - ['findcrossingswithspline_741',['FindCrossingsWithSpline',['../namespacepython_1_1plotting.html#a295d9454418dea7b25a66b3b0e1cbb91',1,'python::plotting']]], - ['findnewbinning_742',['FindNewBinning',['../classch_1_1_auto_rebin.html#a2dc97baa47e812e6aa1817f604e2541a',1,'ch::AutoRebin']]], - ['fixbothranges_743',['FixBothRanges',['../namespacepython_1_1plotting.html#a3f697f7a987d5b37c585a4dd0b3674ea',1,'python::plotting']]], - ['fixboxpadding_744',['FixBoxPadding',['../_plotting_8h.html#a0d9c9cc36ba7c24dcdca74b6173a0335',1,'FixBoxPadding(): Plotting.h'],['../namespacepython_1_1plotting.html#a92d225e6a19a9705204d6137ed884e66',1,'python.plotting.FixBoxPadding()']]], - ['fixoverlay_745',['FixOverlay',['../_plotting_8h.html#a3ab873b129878269a347a387a5f6ff4b',1,'FixOverlay(): Plotting.h'],['../namespacepython_1_1plotting.html#aecb90c5d800c694865a52c8cbe023b63',1,'python.plotting.FixOverlay()']]], - ['fixtoprange_746',['FixTopRange',['../_plotting_8h.html#a5f529c55b51440415c95a200a9e0708f',1,'FixTopRange(): Plotting.h'],['../namespacepython_1_1plotting.html#a66b09224086d976e544a83b86c55df30',1,'python.plotting.FixTopRange()']]], - ['fnerror_747',['FnError',['../namespacech.html#afdabce9fcf0e565dcd93d273e771ef68',1,'ch']]], - ['fntimer_748',['FnTimer',['../classch_1_1_fn_timer.html#aa6e36b42f8bfa11abc0223da0ff485cc',1,'ch::FnTimer']]], - ['foreachobj_749',['ForEachObj',['../classch_1_1_combine_harvester.html#adfa906384002e89b68fa1adcce4023ac',1,'ch::CombineHarvester']]], - ['foreachobs_750',['ForEachObs',['../classch_1_1_combine_harvester.html#a8f679f5e6e6cba2dd10f2d5eb14c4b20',1,'ch::CombineHarvester']]], - ['foreachproc_751',['ForEachProc',['../classch_1_1_combine_harvester.html#a44064524ffe47ccac63ef8025a6f46dc',1,'ch::CombineHarvester']]], - ['foreachsyst_752',['ForEachSyst',['../classch_1_1_combine_harvester.html#a3b73ec07ca4de14bf76383b2921f344a',1,'ch::CombineHarvester']]], - ['formula_753',['Formula',['../classch_1_1syst_1_1_syst_map.html#a4db58a5db937fe43cb8ac143df911557',1,'ch::syst::SystMap::Formula()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a754fb4eefc854fe7689d1d9ee43def0b',1,'ch::syst::SystMapAsymm::Formula()'],['../classch_1_1syst_1_1_syst_map_func.html#a23b0c78ec0a8e7c510e7b9cb35ab17ed',1,'ch::syst::SystMapFunc::Formula()']]], - ['frameth2d_754',['frameTH2D',['../_plotting___contours_8h.html#a6688b27766c40365cfaa5b632a99da97',1,'frameTH2D(): Plotting_Contours.h'],['../namespacepython_1_1plotting.html#ad901fa38f1b30a0c9a2bc3759a6030af',1,'python.plotting.frameTH2D()']]], - ['frozen_755',['frozen',['../classch_1_1_parameter.html#a1d3374ac1270ba79c38338d9bfbd006e',1,'ch::Parameter']]] + ['filterall_685',['FilterAll',['../classch_1_1_combine_harvester.html#aab08f8aee1553b76501ff1a4de0a716c',1,'ch::CombineHarvester']]], + ['filtercontaining_686',['FilterContaining',['../namespacech.html#af86af10e2226a6deb97ad890c1ac9f0b',1,'ch::FilterContaining(Input &in, Filter const &filter, Converter fn, Funcarg arg, bool cond)'],['../namespacech.html#a66828130e239590bca8112c89d68b653',1,'ch::FilterContaining(Input &in, Filter const &filter, Converter fn, bool cond)']]], + ['filtercontainingrgx_687',['FilterContainingRgx',['../namespacech.html#ab0a522713ffa93da18cb26132f875344',1,'ch::FilterContainingRgx(Input &in, Filter const &filter, Converter fn, Funcarg arg, bool cond)'],['../namespacech.html#a281b148e8871f50f2c3269ab91b1a837',1,'ch::FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)']]], + ['filterobs_688',['FilterObs',['../classch_1_1_combine_harvester.html#a35f86a79305555fec0a89b825d1fab71',1,'ch::CombineHarvester']]], + ['filterprocs_689',['FilterProcs',['../classch_1_1_combine_harvester.html#aab6a698c192aa091178bbd8dfbd0266f',1,'ch::CombineHarvester']]], + ['filtersysts_690',['FilterSysts',['../classch_1_1_combine_harvester.html#a91821b9464ebaacb5b92be2b3bc794f8',1,'ch::CombineHarvester']]], + ['findaddpdf_691',['FindAddPdf',['../namespacech.html#a5a4aae941cd175bf6764ad6789b4df8c',1,'ch']]], + ['findnewbinning_692',['FindNewBinning',['../classch_1_1_auto_rebin.html#a2dc97baa47e812e6aa1817f604e2541a',1,'ch::AutoRebin']]], + ['fixboxpadding_693',['FixBoxPadding',['../_plotting_8h.html#a0d9c9cc36ba7c24dcdca74b6173a0335',1,'Plotting.h']]], + ['fixoverlay_694',['FixOverlay',['../_plotting_8h.html#a3ab873b129878269a347a387a5f6ff4b',1,'Plotting.h']]], + ['fixtoprange_695',['FixTopRange',['../_plotting_8h.html#a5f529c55b51440415c95a200a9e0708f',1,'Plotting.h']]], + ['fnerror_696',['FnError',['../namespacech.html#afdabce9fcf0e565dcd93d273e771ef68',1,'ch']]], + ['fntimer_697',['FnTimer',['../classch_1_1_fn_timer.html#aa6e36b42f8bfa11abc0223da0ff485cc',1,'ch::FnTimer']]], + ['foreachobj_698',['ForEachObj',['../classch_1_1_combine_harvester.html#adfa906384002e89b68fa1adcce4023ac',1,'ch::CombineHarvester']]], + ['foreachobs_699',['ForEachObs',['../classch_1_1_combine_harvester.html#a8f679f5e6e6cba2dd10f2d5eb14c4b20',1,'ch::CombineHarvester']]], + ['foreachproc_700',['ForEachProc',['../classch_1_1_combine_harvester.html#a44064524ffe47ccac63ef8025a6f46dc',1,'ch::CombineHarvester']]], + ['foreachsyst_701',['ForEachSyst',['../classch_1_1_combine_harvester.html#a3b73ec07ca4de14bf76383b2921f344a',1,'ch::CombineHarvester']]], + ['formula_702',['Formula',['../classch_1_1syst_1_1_syst_map_func.html#a23b0c78ec0a8e7c510e7b9cb35ab17ed',1,'ch::syst::SystMapFunc::Formula()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a754fb4eefc854fe7689d1d9ee43def0b',1,'ch::syst::SystMapAsymm::Formula()'],['../classch_1_1syst_1_1_syst_map.html#a4db58a5db937fe43cb8ac143df911557',1,'ch::syst::SystMap::Formula()']]], + ['frameth2d_703',['frameTH2D',['../_plotting___contours_8h.html#a6688b27766c40365cfaa5b632a99da97',1,'Plotting_Contours.h']]], + ['frozen_704',['frozen',['../classch_1_1_parameter.html#a1d3374ac1270ba79c38338d9bfbd006e',1,'ch::Parameter']]] ]; diff --git a/search/functions_6.html b/search/functions_6.html index f7d283d10c4..9c4f5fc6546 100644 --- a/search/functions_6.html +++ b/search/functions_6.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_6.js b/search/functions_6.js index 0fe43308b8b..04b158c857e 100644 --- a/search/functions_6.js +++ b/search/functions_6.js @@ -1,40 +1,35 @@ var searchData= [ - ['generatecombinations_756',['GenerateCombinations',['../namespacech.html#a98ec286981dda179332f736f113ab8a5',1,'ch']]], - ['get_757',['get',['../structch_1_1syst_1_1bin.html#ae566871b3c3496a373d94804fe078026',1,'ch::syst::bin::get()'],['../structch_1_1syst_1_1analysis.html#aef7aa22862630508c22b57ecd436e31c',1,'ch::syst::analysis::get()'],['../structch_1_1syst_1_1era.html#a0608c96c7f833d6375c16881c3aeaaf4',1,'ch::syst::era::get()'],['../structch_1_1syst_1_1channel.html#a72ea9574f99f03f955df62612a43c088',1,'ch::syst::channel::get()'],['../structch_1_1syst_1_1mass.html#a2f9dad5f252ac95b1628924fb7ad2b62',1,'ch::syst::mass::get()'],['../structch_1_1syst_1_1process.html#a02b9e1d72b3e3b9160f56859d6563227',1,'ch::syst::process::get()'],['../classch_1_1syst_1_1bin__id.html#a16e43240ce229d97f80b2e6728c3f1d9',1,'ch::syst::bin_id::get()'],['../namespacepython_1_1plotting.html#a150525eee69b8e2727690887a7bd4996',1,'python.plotting.Get()']]], - ['getaddthreshold_758',['GetAddThreshold',['../classch_1_1_bin_by_bin_factory.html#a466ad7528bd24e06dd48545a62695fc3',1,'ch::BinByBinFactory']]], - ['getautomcstatsbins_759',['GetAutoMCStatsBins',['../classch_1_1_combine_harvester.html#ab8656260b678698e1e86cc9a49397d19',1,'ch::CombineHarvester']]], - ['getaxishist_760',['GetAxisHist',['../_plotting_8h.html#aafd63f976dd4c5ae271062e0f91c2681',1,'GetAxisHist(): Plotting.h'],['../namespacepython_1_1plotting.html#a8730baf6077fb5e655003a7fdb93d8f5',1,'python.plotting.GetAxisHist()']]], - ['getclonedth1_761',['GetClonedTH1',['../namespacech.html#a9db822b84dd7cf9f1d3bc76a6a741498',1,'ch']]], - ['getfixnorm_762',['GetFixNorm',['../classch_1_1_bin_by_bin_factory.html#abfa5acf851e5bc60cb444ab99154fe0b',1,'ch::BinByBinFactory']]], - ['getflag_763',['GetFlag',['../classch_1_1_combine_harvester.html#a9af81a9db9eb21d656005a3dee30ad6e',1,'ch::CombineHarvester']]], - ['getmaximumfracuncertbin_764',['GetMaximumFracUncertBin',['../classch_1_1_auto_rebin.html#a72dbe98c7aacd48dd99d03d2b957a934',1,'ch::AutoRebin']]], - ['getmergesaturatedbins_765',['GetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#ac7a3cd16dbec7d10aefef145b56eb20d',1,'ch::BinByBinFactory']]], - ['getmergethreshold_766',['GetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#ad8d08a80d3b39a82b45cd47fb6ac1181',1,'ch::BinByBinFactory']]], - ['getmergezerobins_767',['GetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#ac086255693968d3f93a6599e4eb84a06',1,'ch::BinByBinFactory']]], - ['getobservedrate_768',['GetObservedRate',['../classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f',1,'ch::CombineHarvester']]], - ['getobservedshape_769',['GetObservedShape',['../classch_1_1_combine_harvester.html#a0d3eca727963c0c14a3c04bbdce2ca5e',1,'ch::CombineHarvester']]], - ['getoverlaymarkerandlegend_770',['getOverlayMarkerAndLegend',['../namespacepython_1_1plotting.html#ae40b4249dbf36e8a3815ee51853332d7',1,'python::plotting']]], - ['getpadymax_771',['GetPadYMax',['../_plotting_8h.html#a94fa210a8324e72a82327860972746eb',1,'GetPadYMax(TPad *pad, double x_min, double x_max): Plotting.h'],['../_plotting_8h.html#afa343295bd66905121be203cb7c7cc03',1,'GetPadYMax(TPad *pad): Plotting.h'],['../namespacepython_1_1plotting.html#a1adc45cdaed9e220983039a80fbe86cb',1,'python.plotting.GetPadYMax()']]], - ['getpadymaxinrange_772',['GetPadYMaxInRange',['../namespacepython_1_1plotting.html#ae99dbced2e99bc514bdfa5f57f51ba81',1,'python::plotting']]], - ['getpadymin_773',['GetPadYMin',['../namespacepython_1_1plotting.html#adc51ad4d5572e045e882a1cd12a22ce6',1,'python::plotting']]], - ['getparameter_774',['GetParameter',['../classch_1_1_combine_harvester.html#aea305007bd575b568a0e4cf92fdefb4c',1,'ch::CombineHarvester::GetParameter(std::string const &name) const'],['../classch_1_1_combine_harvester.html#ab994bb3d7ccc19475a28f5864831841e',1,'ch::CombineHarvester::GetParameter(std::string const &name)']]], - ['getparameters_775',['GetParameters',['../classch_1_1_combine_harvester.html#acf6fe66749432f6ab0efdf5955f08df8',1,'ch::CombineHarvester']]], - ['getparfromws_776',['getParFromWs',['../classch_1_1_combine_harvester.html#ad45a973f5947f9a1a09c8d588f778954',1,'ch::CombineHarvester']]], - ['getpattern_777',['GetPattern',['../classch_1_1_bin_by_bin_factory.html#a6807dbf5552c3dbdf96204c506e44143',1,'ch::BinByBinFactory']]], - ['getpoissonerrors_778',['GetPoissonErrors',['../classch_1_1_bin_by_bin_factory.html#a3039403328320d2f2b44fed582da6445',1,'ch::BinByBinFactory']]], - ['getqualififedname_779',['GetQualififedName',['../namespacech.html#a082a87dbfd5b9d61198f7fd4b68e70f9',1,'ch']]], - ['getrate_780',['GetRate',['../classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689',1,'ch::CombineHarvester']]], - ['getratecorrelation_781',['GetRateCorrelation',['../classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0',1,'ch::CombineHarvester']]], - ['getratecovariance_782',['GetRateCovariance',['../classch_1_1_combine_harvester.html#a01d2c826aba1891b7a1a5ce2dba395e4',1,'ch::CombineHarvester']]], - ['getshape_783',['GetShape',['../classch_1_1_combine_harvester.html#a3d265eb50ea8ec70192788d985733d9d',1,'ch::CombineHarvester']]], - ['getshapewithuncertainty_784',['GetShapeWithUncertainty',['../classch_1_1_combine_harvester.html#a749af47fa05e1e11b1488bfdb49efce5',1,'ch::CombineHarvester::GetShapeWithUncertainty()'],['../classch_1_1_combine_harvester.html#afeae4c75ae1a122fdcf0a7f28b15a9d8',1,'ch::CombineHarvester::GetShapeWithUncertainty(RooFitResult const *fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#a4601ceaf29711b11611545a3ee4a8fbb',1,'ch::CombineHarvester::GetShapeWithUncertainty(RooFitResult const &fit, unsigned n_samples)']]], - ['gettuple_785',['GetTuple',['../classch_1_1syst_1_1_syst_map.html#a164b50fafa77c9f471fca8abeec7aba2',1,'ch::syst::SystMap::GetTuple()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ad5ff5e296f946fa96f4b206fc64bae95',1,'ch::syst::SystMapAsymm::GetTuple()'],['../classch_1_1syst_1_1_syst_map_func.html#a7af1c3f39dacbbf5df37da61185a9f55',1,'ch::syst::SystMapFunc::GetTuple()']]], - ['gettupleset_786',['GetTupleSet',['../classch_1_1syst_1_1_syst_map.html#a11bb44a14b6ca6d3da7a9d3a83ca00f0',1,'ch::syst::SystMap::GetTupleSet()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ac65e511162716bff85d69ac6b2a9b9cd',1,'ch::syst::SystMapAsymm::GetTupleSet()'],['../classch_1_1syst_1_1_syst_map_func.html#a9942c61e232bc13fb72c2cdc68ae56eb',1,'ch::syst::SystMapFunc::GetTupleSet()']]], - ['getuncertainty_787',['GetUncertainty',['../classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5',1,'ch::CombineHarvester::GetUncertainty()'],['../classch_1_1_combine_harvester.html#af71f64a1d858700bd16d98cee1c10c26',1,'ch::CombineHarvester::GetUncertainty(RooFitResult const *fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#aa7c0646bfab0a974c72fe815e33c5a32',1,'ch::CombineHarvester::GetUncertainty(RooFitResult const &fit, unsigned n_samples)']]], - ['getverbosity_788',['GetVerbosity',['../classch_1_1_bin_by_bin_factory.html#a0287bddb9ddd5ce6a2c00e8e2d092553',1,'ch::BinByBinFactory']]], - ['graphdifference_789',['GraphDifference',['../namespacepython_1_1plotting.html#a0f8d9d2d1e51e599d676fc0758083bf2',1,'python::plotting']]], - ['graphdivide_790',['GraphDivide',['../namespacepython_1_1plotting.html#aff48ab1136cac75e4af3b66cc055f030',1,'python::plotting']]], - ['graphfromspline_791',['GraphFromSpline',['../namespacech.html#aefdcaba918224f404af9fcd9b53fa7bb',1,'ch']]], - ['groups_792',['groups',['../classch_1_1_parameter.html#a241d3b9acedcf0c2de4d44646e288019',1,'ch::Parameter']]] + ['generatecombinations_705',['GenerateCombinations',['../namespacech.html#a98ec286981dda179332f736f113ab8a5',1,'ch']]], + ['get_706',['get',['../structch_1_1syst_1_1analysis.html#aef7aa22862630508c22b57ecd436e31c',1,'ch::syst::analysis::get()'],['../structch_1_1syst_1_1bin.html#ae566871b3c3496a373d94804fe078026',1,'ch::syst::bin::get()'],['../classch_1_1syst_1_1bin__id.html#a16e43240ce229d97f80b2e6728c3f1d9',1,'ch::syst::bin_id::get()'],['../structch_1_1syst_1_1process.html#a02b9e1d72b3e3b9160f56859d6563227',1,'ch::syst::process::get()'],['../structch_1_1syst_1_1channel.html#a72ea9574f99f03f955df62612a43c088',1,'ch::syst::channel::get()'],['../structch_1_1syst_1_1era.html#a0608c96c7f833d6375c16881c3aeaaf4',1,'ch::syst::era::get()'],['../structch_1_1syst_1_1mass.html#a2f9dad5f252ac95b1628924fb7ad2b62',1,'ch::syst::mass::get()']]], + ['getaddthreshold_707',['GetAddThreshold',['../classch_1_1_bin_by_bin_factory.html#a466ad7528bd24e06dd48545a62695fc3',1,'ch::BinByBinFactory']]], + ['getautomcstatsbins_708',['GetAutoMCStatsBins',['../classch_1_1_combine_harvester.html#ab8656260b678698e1e86cc9a49397d19',1,'ch::CombineHarvester']]], + ['getaxishist_709',['GetAxisHist',['../_plotting_8h.html#aafd63f976dd4c5ae271062e0f91c2681',1,'Plotting.h']]], + ['getclonedth1_710',['GetClonedTH1',['../namespacech.html#a9db822b84dd7cf9f1d3bc76a6a741498',1,'ch']]], + ['getfixnorm_711',['GetFixNorm',['../classch_1_1_bin_by_bin_factory.html#abfa5acf851e5bc60cb444ab99154fe0b',1,'ch::BinByBinFactory']]], + ['getflag_712',['GetFlag',['../classch_1_1_combine_harvester.html#a9af81a9db9eb21d656005a3dee30ad6e',1,'ch::CombineHarvester']]], + ['getmaximumfracuncertbin_713',['GetMaximumFracUncertBin',['../classch_1_1_auto_rebin.html#a72dbe98c7aacd48dd99d03d2b957a934',1,'ch::AutoRebin']]], + ['getmergesaturatedbins_714',['GetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#ac7a3cd16dbec7d10aefef145b56eb20d',1,'ch::BinByBinFactory']]], + ['getmergethreshold_715',['GetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#ad8d08a80d3b39a82b45cd47fb6ac1181',1,'ch::BinByBinFactory']]], + ['getmergezerobins_716',['GetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#ac086255693968d3f93a6599e4eb84a06',1,'ch::BinByBinFactory']]], + ['getobservedrate_717',['GetObservedRate',['../classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f',1,'ch::CombineHarvester']]], + ['getobservedshape_718',['GetObservedShape',['../classch_1_1_combine_harvester.html#a0d3eca727963c0c14a3c04bbdce2ca5e',1,'ch::CombineHarvester']]], + ['getpadymax_719',['GetPadYMax',['../_plotting_8h.html#a94fa210a8324e72a82327860972746eb',1,'GetPadYMax(TPad *pad, double x_min, double x_max): Plotting.h'],['../_plotting_8h.html#afa343295bd66905121be203cb7c7cc03',1,'GetPadYMax(TPad *pad): Plotting.h']]], + ['getparameter_720',['GetParameter',['../classch_1_1_combine_harvester.html#ab994bb3d7ccc19475a28f5864831841e',1,'ch::CombineHarvester::GetParameter(std::string const &name)'],['../classch_1_1_combine_harvester.html#aea305007bd575b568a0e4cf92fdefb4c',1,'ch::CombineHarvester::GetParameter(std::string const &name) const']]], + ['getparameters_721',['GetParameters',['../classch_1_1_combine_harvester.html#acf6fe66749432f6ab0efdf5955f08df8',1,'ch::CombineHarvester']]], + ['getparfromws_722',['getParFromWs',['../classch_1_1_combine_harvester.html#ad45a973f5947f9a1a09c8d588f778954',1,'ch::CombineHarvester']]], + ['getpattern_723',['GetPattern',['../classch_1_1_bin_by_bin_factory.html#a6807dbf5552c3dbdf96204c506e44143',1,'ch::BinByBinFactory']]], + ['getpoissonerrors_724',['GetPoissonErrors',['../classch_1_1_bin_by_bin_factory.html#a3039403328320d2f2b44fed582da6445',1,'ch::BinByBinFactory']]], + ['getqualififedname_725',['GetQualififedName',['../namespacech.html#a082a87dbfd5b9d61198f7fd4b68e70f9',1,'ch']]], + ['getrate_726',['GetRate',['../classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689',1,'ch::CombineHarvester']]], + ['getratecorrelation_727',['GetRateCorrelation',['../classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0',1,'ch::CombineHarvester']]], + ['getratecovariance_728',['GetRateCovariance',['../classch_1_1_combine_harvester.html#a01d2c826aba1891b7a1a5ce2dba395e4',1,'ch::CombineHarvester']]], + ['getshape_729',['GetShape',['../classch_1_1_combine_harvester.html#a3d265eb50ea8ec70192788d985733d9d',1,'ch::CombineHarvester']]], + ['getshapewithuncertainty_730',['GetShapeWithUncertainty',['../classch_1_1_combine_harvester.html#a4601ceaf29711b11611545a3ee4a8fbb',1,'ch::CombineHarvester::GetShapeWithUncertainty(RooFitResult const &fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#afeae4c75ae1a122fdcf0a7f28b15a9d8',1,'ch::CombineHarvester::GetShapeWithUncertainty(RooFitResult const *fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#a749af47fa05e1e11b1488bfdb49efce5',1,'ch::CombineHarvester::GetShapeWithUncertainty()']]], + ['gettuple_731',['GetTuple',['../classch_1_1syst_1_1_syst_map_func.html#a7af1c3f39dacbbf5df37da61185a9f55',1,'ch::syst::SystMapFunc::GetTuple()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ad5ff5e296f946fa96f4b206fc64bae95',1,'ch::syst::SystMapAsymm::GetTuple()'],['../classch_1_1syst_1_1_syst_map.html#a164b50fafa77c9f471fca8abeec7aba2',1,'ch::syst::SystMap::GetTuple(ch::Process *p) const -> decltype(std::make_tuple(T::get(p)...))']]], + ['gettupleset_732',['GetTupleSet',['../classch_1_1syst_1_1_syst_map.html#a11bb44a14b6ca6d3da7a9d3a83ca00f0',1,'ch::syst::SystMap::GetTupleSet()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ac65e511162716bff85d69ac6b2a9b9cd',1,'ch::syst::SystMapAsymm::GetTupleSet()'],['../classch_1_1syst_1_1_syst_map_func.html#a9942c61e232bc13fb72c2cdc68ae56eb',1,'ch::syst::SystMapFunc::GetTupleSet()']]], + ['getuncertainty_733',['GetUncertainty',['../classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5',1,'ch::CombineHarvester::GetUncertainty()'],['../classch_1_1_combine_harvester.html#af71f64a1d858700bd16d98cee1c10c26',1,'ch::CombineHarvester::GetUncertainty(RooFitResult const *fit, unsigned n_samples)'],['../classch_1_1_combine_harvester.html#aa7c0646bfab0a974c72fe815e33c5a32',1,'ch::CombineHarvester::GetUncertainty(RooFitResult const &fit, unsigned n_samples)']]], + ['getverbosity_734',['GetVerbosity',['../classch_1_1_bin_by_bin_factory.html#a0287bddb9ddd5ce6a2c00e8e2d092553',1,'ch::BinByBinFactory']]], + ['graphfromspline_735',['GraphFromSpline',['../namespacech.html#aefdcaba918224f404af9fcd9b53fa7bb',1,'ch']]], + ['groups_736',['groups',['../classch_1_1_parameter.html#a241d3b9acedcf0c2de4d44646e288019',1,'ch::Parameter']]] ]; diff --git a/search/functions_7.html b/search/functions_7.html index a74fe44aa37..46b5c0f613c 100644 --- a/search/functions_7.html +++ b/search/functions_7.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_7.js b/search/functions_7.js index 4caa79c1555..703a99b8f0d 100644 --- a/search/functions_7.js +++ b/search/functions_7.js @@ -1,7 +1,6 @@ var searchData= [ - ['hasnegativebins_793',['HasNegativeBins',['../namespacech.html#a7825c01633c16c8c5d7c46f78acf6d4c',1,'ch']]], - ['higgsconstraint_794',['higgsConstraint',['../namespacepython_1_1plotting.html#a1f64290754cdff288cedd257f2e2a1c2',1,'python::plotting']]], - ['histmapping_795',['HistMapping',['../structch_1_1_hist_mapping.html#a13159d261f11d033b6281333d9e81377',1,'ch::HistMapping::HistMapping()'],['../structch_1_1_hist_mapping.html#a963916cdc08c796c0146d2ec63746d9f',1,'ch::HistMapping::HistMapping(std::string const &p, std::string const &c, std::string const &pat, std::string const &s_pat)']]], - ['histograms_796',['histograms',['../classch_1_1_combine_harvester.html#ab1f4f4e953af6cb2f23b52a69b5900a8',1,'ch::CombineHarvester']]] + ['hasnegativebins_737',['HasNegativeBins',['../namespacech.html#a7825c01633c16c8c5d7c46f78acf6d4c',1,'ch']]], + ['histmapping_738',['HistMapping',['../structch_1_1_hist_mapping.html#a13159d261f11d033b6281333d9e81377',1,'ch::HistMapping::HistMapping()'],['../structch_1_1_hist_mapping.html#a963916cdc08c796c0146d2ec63746d9f',1,'ch::HistMapping::HistMapping(std::string const &p, std::string const &c, std::string const &pat, std::string const &s_pat)']]], + ['histograms_739',['histograms',['../classch_1_1_combine_harvester.html#ab1f4f4e953af6cb2f23b52a69b5900a8',1,'ch::CombineHarvester']]] ]; diff --git a/search/functions_8.html b/search/functions_8.html index 75fc0bea7be..31a1d9503e3 100644 --- a/search/functions_8.html +++ b/search/functions_8.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_8.js b/search/functions_8.js index a35790f8b71..be7965c0937 100644 --- a/search/functions_8.js +++ b/search/functions_8.js @@ -1,16 +1,14 @@ var searchData= [ - ['improveminimum_797',['ImproveMinimum',['../namespacepython_1_1plotting.html#a2cdb3efbda1fb72cb528658c8be0e0a2',1,'python::plotting']]], - ['inc_798',['Inc',['../classch_1_1_fn_timer.html#a68814f0e60141ebf55f8138f7dbb597d',1,'ch::FnTimer']]], - ['init_799',['init',['../classch_1_1syst_1_1_syst_map.html#ad73ffd14fd958ff89a47d94ceb2a93bb',1,'ch::syst::SystMap::init()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a8f833b144d053121aa94e0988c6a3241',1,'ch::syst::SystMapAsymm::init()'],['../classch_1_1syst_1_1_syst_map_func.html#ad3274e0ca730ab55de5d2acf4bcc78f5',1,'ch::syst::SystMapFunc::init()']]], - ['insertobservation_800',['InsertObservation',['../classch_1_1_combine_harvester.html#acd2aec5d4b862d3edc79399ae0801f4c',1,'ch::CombineHarvester']]], - ['insertprocess_801',['InsertProcess',['../classch_1_1_combine_harvester.html#a8a4f3b4e71986fd61990e9a66e455f43',1,'ch::CombineHarvester']]], - ['insertsystematic_802',['InsertSystematic',['../classch_1_1_combine_harvester.html#ab6ba1e447ab5b290c22c23218ddf64cd',1,'ch::CombineHarvester']]], - ['integratefloatrange_803',['IntegrateFloatRange',['../namespacech.html#a35c9af4e2f53f4686e4c4bbba535eb35',1,'ch']]], - ['is_5ffloat_804',['is_float',['../namespacech.html#acde782eef7132d07c095b4468de17dff',1,'ch']]], - ['isasymm_805',['IsAsymm',['../classch_1_1syst_1_1_syst_map.html#a9f9add04f874f11e5b43e19265321213',1,'ch::syst::SystMap::IsAsymm()'],['../classch_1_1syst_1_1_syst_map_asymm.html#af7ff8dd71898280eb7fa2c8735e4f84a',1,'ch::syst::SystMapAsymm::IsAsymm()'],['../classch_1_1syst_1_1_syst_map_func.html#aaf1800cf62304ece89a1217c53ab7e5c',1,'ch::syst::SystMapFunc::IsAsymm()']]], - ['isclose_806',['isclose',['../namespacepython_1_1plotting.html#a3730216ae300da42b4a0e1b28baad343',1,'python::plotting']]], - ['isdata_807',['IsData',['../structch_1_1_hist_mapping.html#a6568c0e7ed30fff12207aabd4ddce5d2',1,'ch::HistMapping']]], - ['ishist_808',['IsHist',['../structch_1_1_hist_mapping.html#a96625017130b3da2cfe0a6afdb0e76a1',1,'ch::HistMapping']]], - ['ispdf_809',['IsPdf',['../structch_1_1_hist_mapping.html#ac7903050d3b4015018857d32f6e9f94c',1,'ch::HistMapping']]] + ['inc_740',['Inc',['../classch_1_1_fn_timer.html#a68814f0e60141ebf55f8138f7dbb597d',1,'ch::FnTimer']]], + ['init_741',['init',['../classch_1_1syst_1_1_syst_map.html#ad73ffd14fd958ff89a47d94ceb2a93bb',1,'ch::syst::SystMap::init()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a8f833b144d053121aa94e0988c6a3241',1,'ch::syst::SystMapAsymm::init()'],['../classch_1_1syst_1_1_syst_map_func.html#ad3274e0ca730ab55de5d2acf4bcc78f5',1,'ch::syst::SystMapFunc::init()']]], + ['insertobservation_742',['InsertObservation',['../classch_1_1_combine_harvester.html#acd2aec5d4b862d3edc79399ae0801f4c',1,'ch::CombineHarvester']]], + ['insertprocess_743',['InsertProcess',['../classch_1_1_combine_harvester.html#a8a4f3b4e71986fd61990e9a66e455f43',1,'ch::CombineHarvester']]], + ['insertsystematic_744',['InsertSystematic',['../classch_1_1_combine_harvester.html#ab6ba1e447ab5b290c22c23218ddf64cd',1,'ch::CombineHarvester']]], + ['integratefloatrange_745',['IntegrateFloatRange',['../namespacech.html#a35c9af4e2f53f4686e4c4bbba535eb35',1,'ch']]], + ['is_5ffloat_746',['is_float',['../namespacech.html#acde782eef7132d07c095b4468de17dff',1,'ch']]], + ['isasymm_747',['IsAsymm',['../classch_1_1syst_1_1_syst_map.html#a9f9add04f874f11e5b43e19265321213',1,'ch::syst::SystMap::IsAsymm()'],['../classch_1_1syst_1_1_syst_map_asymm.html#af7ff8dd71898280eb7fa2c8735e4f84a',1,'ch::syst::SystMapAsymm::IsAsymm()'],['../classch_1_1syst_1_1_syst_map_func.html#aaf1800cf62304ece89a1217c53ab7e5c',1,'ch::syst::SystMapFunc::IsAsymm()']]], + ['isdata_748',['IsData',['../structch_1_1_hist_mapping.html#a6568c0e7ed30fff12207aabd4ddce5d2',1,'ch::HistMapping']]], + ['ishist_749',['IsHist',['../structch_1_1_hist_mapping.html#a96625017130b3da2cfe0a6afdb0e76a1',1,'ch::HistMapping']]], + ['ispdf_750',['IsPdf',['../structch_1_1_hist_mapping.html#ac7903050d3b4015018857d32f6e9f94c',1,'ch::HistMapping']]] ]; diff --git a/search/functions_9.html b/search/functions_9.html index 7541c9e3e68..9a8e4290c9a 100644 --- a/search/functions_9.html +++ b/search/functions_9.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_9.js b/search/functions_9.js index 3c2d46ba76e..fc0a48b2b32 100644 --- a/search/functions_9.js +++ b/search/functions_9.js @@ -1,5 +1,5 @@ var searchData= [ - ['join_810',['Join',['../namespacech.html#a6c065d2d25d44e2ca91d56cf6f97964f',1,'ch']]], - ['joinstr_811',['JoinStr',['../namespacech.html#abfd9e94a6fd4c33abe1bbd5fb03e7f28',1,'ch']]] + ['join_751',['Join',['../namespacech.html#a6c065d2d25d44e2ca91d56cf6f97964f',1,'ch']]], + ['joinstr_752',['JoinStr',['../namespacech.html#abfd9e94a6fd4c33abe1bbd5fb03e7f28',1,'ch']]] ]; diff --git a/search/functions_a.html b/search/functions_a.html index 5a5be6300ab..5ecc152cab4 100644 --- a/search/functions_a.html +++ b/search/functions_a.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_a.js b/search/functions_a.js index 79ef491366b..a8c60fa7c21 100644 --- a/search/functions_a.js +++ b/search/functions_a.js @@ -1,7 +1,4 @@ var searchData= [ - ['limitbandtgraphfromjson_812',['LimitBandTGraphFromJSON',['../namespacepython_1_1plotting.html#aa29285177084b6ed15e8f622f83ab4fa',1,'python::plotting']]], - ['limittgraphfromjson_813',['LimitTGraphFromJSON',['../namespacepython_1_1plotting.html#a62d4ff5f662142eb7f035c9d6a23499c',1,'python::plotting']]], - ['limittgraphfromjsonfile_814',['LimitTGraphFromJSONFile',['../namespacepython_1_1plotting.html#a82a5f62f79fe15d0c9b2b42d8ce61b7a',1,'python::plotting']]], - ['logline_815',['LogLine',['../namespacech.html#a5903f0de2f0d18871f4dab7430d04830',1,'ch']]] + ['logline_753',['LogLine',['../namespacech.html#a5903f0de2f0d18871f4dab7430d04830',1,'ch']]] ]; diff --git a/search/functions_b.html b/search/functions_b.html index fc2d5aa4e7a..e301fedd7d1 100644 --- a/search/functions_b.html +++ b/search/functions_b.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_b.js b/search/functions_b.js index 1a5b965fd0a..f9014b99e74 100644 --- a/search/functions_b.js +++ b/search/functions_b.js @@ -1,23 +1,16 @@ var searchData= [ - ['main_816',['main',['../_s_m_legacy_example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): SMLegacyExample.cpp'],['../_m_s_s_m_yield_table_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): MSSMYieldTable.cpp'],['../_post_fit_shapes_from_workspace_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): PostFitShapesFromWorkspace.cpp']]], - ['make_5frelative_817',['make_relative',['../namespacech.html#a2f4db67e7b9039935a58ea60b650041a',1,'ch']]], - ['make_5funique_818',['make_unique',['../namespacech.html#a1d79b15a838a8871759a19ab4efdf07f',1,'ch']]], - ['makeerrorband_819',['MakeErrorBand',['../namespacepython_1_1plotting.html#a57beab29bf647837ac4f0460335ee03d',1,'python::plotting']]], - ['makehist1d_820',['makeHist1D',['../namespacepython_1_1plotting.html#aed426fb163d0ac1a6bd8fed66acd6178',1,'python::plotting']]], - ['makehist2d_821',['makeHist2D',['../namespacepython_1_1plotting.html#a0c4fbbe51debf6af728af019e9a0a031',1,'python::plotting']]], - ['makemorphdebugplots_822',['MakeMorphDebugPlots',['../namespacech.html#a21ce0ae95c56bde7e1ecc1f21a839d2d',1,'ch']]], - ['makeratiohist_823',['MakeRatioHist',['../_plotting_8h.html#a526842799b4de3a542d8114989dba48d',1,'MakeRatioHist(): Plotting.h'],['../namespacepython_1_1plotting.html#ab38cd8888aa183c4f351925cd6d49478',1,'python.plotting.MakeRatioHist()']]], - ['maketchain_824',['MakeTChain',['../namespacepython_1_1plotting.html#a64ee6bffa0941169d495863f3294c9a4',1,'python::plotting']]], - ['makevarbinhist2d_825',['makeVarBinHist2D',['../namespacepython_1_1plotting.html#a1b60082b4561b4b3af03a5916080162b',1,'python::plotting']]], - ['mass_826',['mass',['../classch_1_1_combine_harvester.html#a25c231ed8b1614c5d50f192210374474',1,'ch::CombineHarvester::mass()'],['../classch_1_1_object.html#ae2f9e80af391e105a6b6bc27107e3c9e',1,'ch::Object::mass()']]], - ['mass_5fset_827',['mass_set',['../classch_1_1_combine_harvester.html#a86674bf95164c39facfd5f9583aae613',1,'ch::CombineHarvester']]], - ['massesfromrange_828',['MassesFromRange',['../namespacech.html#a9aa7fae276e9a3482b0e2e0b7adf779b',1,'ch']]], - ['matchingprocess_829',['MatchingProcess',['../namespacech.html#a9c09b4e5a6dbbd49dfebd9235a2f60b5',1,'ch']]], - ['mergeandadd_830',['MergeAndAdd',['../classch_1_1_bin_by_bin_factory.html#a9873544209128b4d1dcbf9d897fe1094',1,'ch::BinByBinFactory']]], - ['mergebinerrors_831',['MergeBinErrors',['../classch_1_1_bin_by_bin_factory.html#a6e0495e815c6a5ac41b45fb200b860cf',1,'ch::BinByBinFactory::MergeBinErrors()'],['../classch_1_1_combine_harvester.html#a37e613f8c2c67871b4b3bc89c78a1f68',1,'ch::CombineHarvester::MergeBinErrors()']]], - ['mergedjson_832',['MergedJson',['../namespacech.html#aec2e836e1039ccd11ac13a201627c5c8',1,'ch::MergedJson(int argc, char *argv[])'],['../namespacech.html#a52e06fe8e122355225a7c485d88c22ff',1,'ch::MergedJson(std::vector< std::string > const &vec)']]], - ['modtdrstyle_833',['ModTDRStyle',['../_plotting___style_8h.html#a7f6399c7470d5331ac4c464cb14c86e1',1,'ModTDRStyle(int width, int height, double t, double b, double l, double r): Plotting_Style.h'],['../_plotting___style_8h.html#a25f3f929fadd38fd9423aaa6ef6ddd51',1,'ModTDRStyle(): Plotting_Style.h'],['../namespacepython_1_1plotting.html#a96d0e09c5c4ee59bd3e1c00050a3ac68',1,'python.plotting.ModTDRStyle()']]], - ['multiratiosplit_834',['MultiRatioSplit',['../namespacepython_1_1plotting.html#aba63da9138777e72b3516e1a76bd54af',1,'python::plotting']]], - ['multiratiosplitcolumns_835',['MultiRatioSplitColumns',['../namespacepython_1_1plotting.html#a774df4e4f7e5c1888a96ed042edd36b2',1,'python::plotting']]] + ['main_754',['main',['../_post_fit_shapes_from_workspace_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): PostFitShapesFromWorkspace.cpp'],['../_s_m_legacy_example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main(): SMLegacyExample.cpp'],['../_m_s_s_m_yield_table_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97',1,'main(int argc, char *argv[]): MSSMYieldTable.cpp']]], + ['make_5frelative_755',['make_relative',['../namespacech.html#a2f4db67e7b9039935a58ea60b650041a',1,'ch']]], + ['make_5funique_756',['make_unique',['../namespacech.html#a1d79b15a838a8871759a19ab4efdf07f',1,'ch']]], + ['makemorphdebugplots_757',['MakeMorphDebugPlots',['../namespacech.html#a21ce0ae95c56bde7e1ecc1f21a839d2d',1,'ch']]], + ['makeratiohist_758',['MakeRatioHist',['../_plotting_8h.html#a526842799b4de3a542d8114989dba48d',1,'Plotting.h']]], + ['mass_759',['mass',['../classch_1_1_object.html#ae2f9e80af391e105a6b6bc27107e3c9e',1,'ch::Object::mass()'],['../classch_1_1_combine_harvester.html#a25c231ed8b1614c5d50f192210374474',1,'ch::CombineHarvester::mass(std::vector< std::string > const &vec, bool cond=true)']]], + ['mass_5fset_760',['mass_set',['../classch_1_1_combine_harvester.html#a86674bf95164c39facfd5f9583aae613',1,'ch::CombineHarvester']]], + ['massesfromrange_761',['MassesFromRange',['../namespacech.html#a9aa7fae276e9a3482b0e2e0b7adf779b',1,'ch']]], + ['matchingprocess_762',['MatchingProcess',['../namespacech.html#a9c09b4e5a6dbbd49dfebd9235a2f60b5',1,'ch']]], + ['mergeandadd_763',['MergeAndAdd',['../classch_1_1_bin_by_bin_factory.html#a9873544209128b4d1dcbf9d897fe1094',1,'ch::BinByBinFactory']]], + ['mergebinerrors_764',['MergeBinErrors',['../classch_1_1_combine_harvester.html#a37e613f8c2c67871b4b3bc89c78a1f68',1,'ch::CombineHarvester::MergeBinErrors()'],['../classch_1_1_bin_by_bin_factory.html#a6e0495e815c6a5ac41b45fb200b860cf',1,'ch::BinByBinFactory::MergeBinErrors()']]], + ['mergedjson_765',['MergedJson',['../namespacech.html#aec2e836e1039ccd11ac13a201627c5c8',1,'ch::MergedJson(int argc, char *argv[])'],['../namespacech.html#a52e06fe8e122355225a7c485d88c22ff',1,'ch::MergedJson(std::vector< std::string > const &vec)']]], + ['modtdrstyle_766',['ModTDRStyle',['../_plotting___style_8h.html#a7f6399c7470d5331ac4c464cb14c86e1',1,'ModTDRStyle(int width, int height, double t, double b, double l, double r): Plotting_Style.h'],['../_plotting___style_8h.html#a25f3f929fadd38fd9423aaa6ef6ddd51',1,'ModTDRStyle(): Plotting_Style.h']]] ]; diff --git a/search/functions_c.html b/search/functions_c.html index a1a14378148..c4f32687708 100644 --- a/search/functions_c.html +++ b/search/functions_c.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_c.js b/search/functions_c.js index 4d584f77930..e0374303d9c 100644 --- a/search/functions_c.js +++ b/search/functions_c.js @@ -1,7 +1,6 @@ var searchData= [ - ['name_836',['name',['../classch_1_1_parameter.html#ac69867be1fd0c821d4382210ed6320e2',1,'ch::Parameter::name()'],['../classch_1_1_systematic.html#a872469110fe349da45922431d6d24bc7',1,'ch::Systematic::name()']]], - ['newinterpolate_837',['NewInterpolate',['../namespacepython_1_1plotting.html#ac3c06e73bd892e15ea8fc2428d6cef8e',1,'python::plotting']]], - ['no_5fnorm_5frate_838',['no_norm_rate',['../classch_1_1_process.html#a02bffdf7ced997cc8bdd51953c357f27',1,'ch::Process']]], - ['norm_839',['norm',['../classch_1_1_process.html#a5e09f829f8bda2f3b241500fba58f985',1,'ch::Process']]] + ['name_767',['name',['../classch_1_1_parameter.html#ac69867be1fd0c821d4382210ed6320e2',1,'ch::Parameter::name()'],['../classch_1_1_systematic.html#a872469110fe349da45922431d6d24bc7',1,'ch::Systematic::name()']]], + ['no_5fnorm_5frate_768',['no_norm_rate',['../classch_1_1_process.html#a02bffdf7ced997cc8bdd51953c357f27',1,'ch::Process']]], + ['norm_769',['norm',['../classch_1_1_process.html#a5e09f829f8bda2f3b241500fba58f985',1,'ch::Process']]] ]; diff --git a/search/functions_d.html b/search/functions_d.html index 4375535f35d..7a1ed065d71 100644 --- a/search/functions_d.html +++ b/search/functions_d.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_d.js b/search/functions_d.js index 8e87517eb49..cd61adfa46c 100644 --- a/search/functions_d.js +++ b/search/functions_d.js @@ -1,11 +1,11 @@ var searchData= [ - ['object_840',['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_841',['observable',['../classch_1_1_process.html#ab032210cfba1f6edc94218ed4a6411ed',1,'ch::Process']]], - ['observation_842',['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_843',['OnePad',['../_plotting_8h.html#aa098641a0337d718d1074531133b884f',1,'OnePad(): Plotting.h'],['../namespacepython_1_1plotting.html#aedf242792ebe14a722fed350f225d53c',1,'python.plotting.OnePad()']]], - ['openfromtfile_844',['OpenFromTFile',['../namespacech.html#aa859d4d87eb7f27b2499e55c73789d98',1,'ch::OpenFromTFile(std::string const &fullpath)'],['../namespacech.html#af7fe148f865bc9674341c9aa36d875ef',1,'ch::OpenFromTFile(TFile *file, std::string const &path)']]], - ['operator_28_29_845',['operator()',['../classch_1_1syst_1_1_syst_map.html#a7f819b6a66c8085b67e0e21e289c9e48',1,'ch::syst::SystMap::operator()()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ae50337ca6a1123df4add8140ab51c6f3',1,'ch::syst::SystMapAsymm::operator()()'],['../classch_1_1syst_1_1_syst_map_func.html#a5f6c2440666ecd77fd44075d019fb584',1,'ch::syst::SystMapFunc::operator()()']]], - ['operator_3c_3c_846',['operator<<',['../namespacech.html#a40560251a7c7ee58a41bd890f1963175',1,'ch::operator<<(std::ostream &out, HistMapping const &val)'],['../namespacech.html#a2e35146227543a2245a91020259faaa8',1,'ch::operator<<(std::ostream &out, Observation const &val)'],['../namespacech.html#aad11ca6f4dfe946a28a052117116ee04',1,'ch::operator<<(std::ostream &out, Parameter &val)'],['../namespacech.html#a8a22853e782855a8d9c00d074a8749dc',1,'ch::operator<<(std::ostream &out, Process const &val)'],['../namespacech.html#a5874d67ae782c76e78e6b9afcadbe784',1,'ch::operator<<(std::ostream &out, Systematic const &val)']]], - ['operator_3d_847',['operator=',['../classch_1_1_combine_harvester.html#a537e7bf110bf4e466d5c39843e76fd03',1,'ch::CombineHarvester::operator=()'],['../classch_1_1_object.html#a852658426c7ab24d17a8cf5b33ec6805',1,'ch::Object::operator=()'],['../classch_1_1_observation.html#a64da98f3d291c5f1b9cdd26d9e6999c5',1,'ch::Observation::operator=()'],['../classch_1_1_parameter.html#ae6cafb3e152e109ff3e3e7b829eb58fe',1,'ch::Parameter::operator=()'],['../classch_1_1_process.html#ae59eb8e73740459d47205a32d23b517a',1,'ch::Process::operator=()'],['../classch_1_1_systematic.html#a14586d1bc593e9564ce15736ad8367c4',1,'ch::Systematic::operator=()']]] + ['object_770',['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)'],['../classch_1_1_object.html#adff80080730670f56fc3fcb4cecf65a7',1,'ch::Object::Object()']]], + ['observable_771',['observable',['../classch_1_1_process.html#ab032210cfba1f6edc94218ed4a6411ed',1,'ch::Process']]], + ['observation_772',['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_773',['OnePad',['../_plotting_8h.html#aa098641a0337d718d1074531133b884f',1,'Plotting.h']]], + ['openfromtfile_774',['OpenFromTFile',['../namespacech.html#aa859d4d87eb7f27b2499e55c73789d98',1,'ch::OpenFromTFile(std::string const &fullpath)'],['../namespacech.html#af7fe148f865bc9674341c9aa36d875ef',1,'ch::OpenFromTFile(TFile *file, std::string const &path)']]], + ['operator_28_29_775',['operator()',['../classch_1_1syst_1_1_syst_map_func.html#a5f6c2440666ecd77fd44075d019fb584',1,'ch::syst::SystMapFunc::operator()()'],['../classch_1_1syst_1_1_syst_map_asymm.html#ae50337ca6a1123df4add8140ab51c6f3',1,'ch::syst::SystMapAsymm::operator()()'],['../classch_1_1syst_1_1_syst_map.html#a7f819b6a66c8085b67e0e21e289c9e48',1,'ch::syst::SystMap::operator()()']]], + ['operator_3c_3c_776',['operator<<',['../namespacech.html#a8a22853e782855a8d9c00d074a8749dc',1,'ch::operator<<(std::ostream &out, Process const &val)'],['../namespacech.html#aad11ca6f4dfe946a28a052117116ee04',1,'ch::operator<<(std::ostream &out, Parameter &val)'],['../namespacech.html#a2e35146227543a2245a91020259faaa8',1,'ch::operator<<(std::ostream &out, Observation const &val)'],['../namespacech.html#a40560251a7c7ee58a41bd890f1963175',1,'ch::operator<<(std::ostream &out, HistMapping const &val)'],['../namespacech.html#a5874d67ae782c76e78e6b9afcadbe784',1,'ch::operator<<(std::ostream &out, Systematic const &val)']]], + ['operator_3d_777',['operator=',['../classch_1_1_systematic.html#a14586d1bc593e9564ce15736ad8367c4',1,'ch::Systematic::operator=()'],['../classch_1_1_process.html#ae59eb8e73740459d47205a32d23b517a',1,'ch::Process::operator=()'],['../classch_1_1_parameter.html#ae6cafb3e152e109ff3e3e7b829eb58fe',1,'ch::Parameter::operator=()'],['../classch_1_1_observation.html#a64da98f3d291c5f1b9cdd26d9e6999c5',1,'ch::Observation::operator=()'],['../classch_1_1_object.html#a852658426c7ab24d17a8cf5b33ec6805',1,'ch::Object::operator=()'],['../classch_1_1_combine_harvester.html#a537e7bf110bf4e466d5c39843e76fd03',1,'ch::CombineHarvester::operator=()']]] ]; diff --git a/search/functions_e.html b/search/functions_e.html index 0f2054469ca..22d2a6bf550 100644 --- a/search/functions_e.html +++ b/search/functions_e.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_e.js b/search/functions_e.js index e5a1c2c69aa..32880971206 100644 --- a/search/functions_e.js +++ b/search/functions_e.js @@ -1,27 +1,28 @@ var searchData= [ - ['parameter_848',['Parameter',['../classch_1_1_parameter.html#ac3be609032d840cf477cfa3cf7982c7a',1,'ch::Parameter::Parameter()'],['../classch_1_1_parameter.html#aa4ee9592da987b521e06b99bb2323a68',1,'ch::Parameter::Parameter(Parameter const &other)'],['../classch_1_1_parameter.html#ad1459e77cbe8a5a4814ca9b90be346fd',1,'ch::Parameter::Parameter(Parameter &&other)']]], - ['parametersbyname_849',['ParametersByName',['../namespacech.html#aef408f71dec36c69cd2e145505212c49',1,'ch']]], - ['paramfromfilename_850',['ParamFromFilename',['../namespacepython_1_1plotting.html#a6a1dcbff61edbcd15e68682f3e8836dc',1,'python::plotting']]], - ['parsecombineworkspace_851',['ParseCombineWorkspace',['../namespacech.html#a5ae8a88e9e0d2120deec06e553a525f6',1,'ch']]], - ['parsecombineworkspacepy_852',['ParseCombineWorkspacePy',['../namespacech.html#af7bcceb32c2f4a82fe1de32a93d0dfa3',1,'ch']]], - ['parsedatacard_853',['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_854',['ParseFileLines',['../namespacech.html#a23a4079d5c68e21d9697570255e08224',1,'ch']]], - ['pdf_855',['pdf',['../classch_1_1_process.html#a0fdc4f6b03943eb043b14428ddcdb5cd',1,'ch::Process']]], - ['pdf_5fd_856',['pdf_d',['../classch_1_1_systematic.html#a95c61a9b2de9df89a598c7eced3f61b3',1,'ch::Systematic']]], - ['pdf_5fu_857',['pdf_u',['../classch_1_1_systematic.html#aa5cd1f87ffe9aadcb41fed7bd746bdef',1,'ch::Systematic']]], - ['pdfs_858',['pdfs',['../classch_1_1_combine_harvester.html#a2b38f8591d1dc642136160c96112ec55',1,'ch::CombineHarvester']]], - ['positionedlegend_859',['PositionedLegend',['../_plotting_8h.html#a658a1da4505b61eb5a0f0db01c01e161',1,'PositionedLegend(): Plotting.h'],['../namespacepython_1_1plotting.html#ad7f839ac00738ce41f8503ac96e671cd',1,'python.plotting.PositionedLegend()']]], - ['print_860',['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()']]], - ['printall_861',['PrintAll',['../classch_1_1_combine_harvester.html#a63ffe9b598a7a6dc9f3cab118b3703df',1,'ch::CombineHarvester']]], - ['printheader_862',['PrintHeader',['../classch_1_1_observation.html#a4f8f4cc0a612fc88effb03189daa3b13',1,'ch::Observation::PrintHeader()'],['../classch_1_1_parameter.html#a62b6307c0675a81c420b9d6807928227',1,'ch::Parameter::PrintHeader()'],['../classch_1_1_process.html#ab2cc280e1babe330441de6791e06c2c1',1,'ch::Process::PrintHeader()'],['../classch_1_1_systematic.html#aef9f627405060f65815dc15a1d4abbaf',1,'ch::Systematic::PrintHeader()']]], - ['printobs_863',['PrintObs',['../classch_1_1_combine_harvester.html#a28d52375fa2e13d80b6db9aa8b10113b',1,'ch::CombineHarvester']]], - ['printparams_864',['PrintParams',['../classch_1_1_combine_harvester.html#aadea1e068eb474ba7919b1894033e3d3',1,'ch::CombineHarvester']]], - ['printproc_865',['PrintProc',['../namespacech.html#a433334f3da17eb2886510a97df0d2ef4',1,'ch']]], - ['printprocs_866',['PrintProcs',['../classch_1_1_combine_harvester.html#ac65ce5523ef5b0fdcab6c2c6d21b49f4',1,'ch::CombineHarvester']]], - ['printsystematic_867',['PrintSystematic',['../namespacech.html#aaec3acecfcee89ac9d4dfe9d0c20827c',1,'ch']]], - ['printsysts_868',['PrintSysts',['../classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d',1,'ch::CombineHarvester']]], - ['process_869',['process',['../classch_1_1_combine_harvester.html#a3afe330e302ad37b9fd69a821b8b4099',1,'ch::CombineHarvester::process()'],['../classch_1_1_object.html#a740d853956df951a7cb08094e21f0332',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_5frgx_870',['process_rgx',['../classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329',1,'ch::CombineHarvester']]], - ['process_5fset_871',['process_set',['../classch_1_1_combine_harvester.html#a54433aa1b16fad10c0d29f5d8c789716',1,'ch::CombineHarvester']]] + ['param_5fstr_5fext_778',['param_str_ext',['../classch_1_1_systematic.html#a995bc6ca55d509c76ba92322631e730b',1,'ch::Systematic']]], + ['parameter_779',['Parameter',['../classch_1_1_parameter.html#ac3be609032d840cf477cfa3cf7982c7a',1,'ch::Parameter::Parameter()'],['../classch_1_1_parameter.html#aa4ee9592da987b521e06b99bb2323a68',1,'ch::Parameter::Parameter(Parameter const &other)'],['../classch_1_1_parameter.html#ad1459e77cbe8a5a4814ca9b90be346fd',1,'ch::Parameter::Parameter(Parameter &&other)']]], + ['parametersbyname_780',['ParametersByName',['../namespacech.html#aef408f71dec36c69cd2e145505212c49',1,'ch']]], + ['parsecombineworkspace_781',['ParseCombineWorkspace',['../namespacech.html#a5ae8a88e9e0d2120deec06e553a525f6',1,'ch']]], + ['parsecombineworkspacepy_782',['ParseCombineWorkspacePy',['../namespacech.html#af7bcceb32c2f4a82fe1de32a93d0dfa3',1,'ch']]], + ['parsedatacard_783',['ParseDatacard',['../classch_1_1_combine_harvester.html#a4b7fe2fb7c1b3ba4da84fbd123388f77',1,'ch::CombineHarvester::ParseDatacard(std::string const &filename, std::string parse_rule="")'],['../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)']]], + ['parsefilelines_784',['ParseFileLines',['../namespacech.html#a23a4079d5c68e21d9697570255e08224',1,'ch']]], + ['pdf_785',['pdf',['../classch_1_1_process.html#a0fdc4f6b03943eb043b14428ddcdb5cd',1,'ch::Process']]], + ['pdf_5fd_786',['pdf_d',['../classch_1_1_systematic.html#a95c61a9b2de9df89a598c7eced3f61b3',1,'ch::Systematic']]], + ['pdf_5fu_787',['pdf_u',['../classch_1_1_systematic.html#aa5cd1f87ffe9aadcb41fed7bd746bdef',1,'ch::Systematic']]], + ['pdfs_788',['pdfs',['../classch_1_1_combine_harvester.html#a2b38f8591d1dc642136160c96112ec55',1,'ch::CombineHarvester']]], + ['positionedlegend_789',['PositionedLegend',['../_plotting_8h.html#a658a1da4505b61eb5a0f0db01c01e161',1,'Plotting.h']]], + ['print_790',['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()']]], + ['printall_791',['PrintAll',['../classch_1_1_combine_harvester.html#a63ffe9b598a7a6dc9f3cab118b3703df',1,'ch::CombineHarvester']]], + ['printheader_792',['PrintHeader',['../classch_1_1_observation.html#a4f8f4cc0a612fc88effb03189daa3b13',1,'ch::Observation::PrintHeader()'],['../classch_1_1_systematic.html#aef9f627405060f65815dc15a1d4abbaf',1,'ch::Systematic::PrintHeader()'],['../classch_1_1_process.html#ab2cc280e1babe330441de6791e06c2c1',1,'ch::Process::PrintHeader()'],['../classch_1_1_parameter.html#a62b6307c0675a81c420b9d6807928227',1,'ch::Parameter::PrintHeader()']]], + ['printobs_793',['PrintObs',['../classch_1_1_combine_harvester.html#a28d52375fa2e13d80b6db9aa8b10113b',1,'ch::CombineHarvester']]], + ['printparams_794',['PrintParams',['../classch_1_1_combine_harvester.html#aadea1e068eb474ba7919b1894033e3d3',1,'ch::CombineHarvester']]], + ['printproc_795',['PrintProc',['../namespacech.html#a433334f3da17eb2886510a97df0d2ef4',1,'ch']]], + ['printprocs_796',['PrintProcs',['../classch_1_1_combine_harvester.html#ac65ce5523ef5b0fdcab6c2c6d21b49f4',1,'ch::CombineHarvester']]], + ['printsystematic_797',['PrintSystematic',['../namespacech.html#aaec3acecfcee89ac9d4dfe9d0c20827c',1,'ch']]], + ['printsysts_798',['PrintSysts',['../classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d',1,'ch::CombineHarvester']]], + ['process_799',['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_800',['process',['../classch_1_1_object.html#a740d853956df951a7cb08094e21f0332',1,'ch::Object::process()'],['../classch_1_1_combine_harvester.html#a3afe330e302ad37b9fd69a821b8b4099',1,'ch::CombineHarvester::process(std::vector< std::string > const &vec, bool cond=true)']]], + ['process_5frgx_801',['process_rgx',['../classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329',1,'ch::CombineHarvester']]], + ['process_5fset_802',['process_set',['../classch_1_1_combine_harvester.html#a54433aa1b16fad10c0d29f5d8c789716',1,'ch::CombineHarvester']]] ]; diff --git a/search/functions_f.html b/search/functions_f.html index 0dc9f86c77a..54b7dee083a 100644 --- a/search/functions_f.html +++ b/search/functions_f.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/functions_f.js b/search/functions_f.js index 42027c133ca..67f7567a5d3 100644 --- a/search/functions_f.js +++ b/search/functions_f.js @@ -1,25 +1,18 @@ var searchData= [ - ['range_5fd_872',['range_d',['../classch_1_1_parameter.html#ad0cf0c6b5ad729e7c991ab468bc9f8d2',1,'ch::Parameter']]], - ['range_5fu_873',['range_u',['../classch_1_1_parameter.html#ade82fbedd8ad452e061b84f58e8ed8f8',1,'ch::Parameter']]], - ['rate_874',['rate',['../classch_1_1_observation.html#aa82898ea9469ea6e9346410bfe4b9754',1,'ch::Observation::rate()'],['../classch_1_1_process.html#a4683fb53999bbc1cbefb5637a4843e55',1,'ch::Process::rate()']]], - ['rebin_875',['Rebin',['../classch_1_1_auto_rebin.html#af9525ed197d8b5742695c729645ea4a2',1,'ch::AutoRebin::Rebin()'],['../namespacepython_1_1plotting.html#a063d0ef08d16c34e8b7f56ba484d202d',1,'python.plotting.rebin()']]], - ['rebinhist_876',['RebinHist',['../namespacech.html#a2cbcfd049543bfe9f63958bc671deeae',1,'ch']]], - ['removegraphxduplicates_877',['RemoveGraphXDuplicates',['../namespacepython_1_1plotting.html#aac0d06e709f0d32c009900f9a3fbed1e',1,'python::plotting']]], - ['removegraphyabove_878',['RemoveGraphYAbove',['../namespacepython_1_1plotting.html#abdd045f87fa96a1274213a85208e8a45',1,'python::plotting']]], - ['removegraphyall_879',['RemoveGraphYAll',['../namespacepython_1_1plotting.html#a41521655e488b97e5e50289fec090fd6',1,'python::plotting']]], - ['removegroup_880',['RemoveGroup',['../classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810',1,'ch::CombineHarvester']]], - ['removeinxrange_881',['RemoveInXRange',['../namespacepython_1_1plotting.html#ad36eb972250a37d6faac15d84d764af6',1,'python::plotting']]], - ['removenearmin_882',['RemoveNearMin',['../namespacepython_1_1plotting.html#af7c1d446d7f6d584150ffa60c7b2bd77',1,'python::plotting']]], - ['removesmalldelta_883',['RemoveSmallDelta',['../namespacepython_1_1plotting.html#a7f7ff82b2cb2e897aa848dd097228507',1,'python::plotting']]], - ['renameautomcstatsbin_884',['RenameAutoMCStatsBin',['../classch_1_1_combine_harvester.html#a44d791bc4812feb68729e7660fd3e5b3',1,'ch::CombineHarvester']]], - ['renamegroup_885',['RenameGroup',['../classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9',1,'ch::CombineHarvester']]], - ['renameparameter_886',['RenameParameter',['../classch_1_1_combine_harvester.html#a2825b9eeec47f7b23f93520bf615b581',1,'ch::CombineHarvester']]], - ['renameparinws_887',['renameParInWs',['../classch_1_1_combine_harvester.html#a45dc5b119b4c0618c0f3e614d48ae2d6',1,'ch::CombineHarvester']]], - ['renamesystematic_888',['RenameSystematic',['../classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9',1,'ch::CombineHarvester']]], - ['restorebinning_889',['RestoreBinning',['../namespacech.html#a23cd9444931a49de080638458f722501',1,'ch']]], - ['reversebins_890',['ReverseBins',['../_post_fit_shapes_from_workspace_8cpp.html#a48acb519f981bec18bc41e658431176d',1,'PostFitShapesFromWorkspace.cpp']]], - ['rezerotgraph_891',['ReZeroTGraph',['../_plotting_8h.html#af2524f9f02ac66a16164c87bfc149628',1,'ReZeroTGraph(): Plotting.h'],['../namespacepython_1_1plotting.html#a206835e129a1cec888da0a48e8762bd9',1,'python.plotting.ReZeroTGraph()']]], - ['roccurvefrom1dhists_892',['RocCurveFrom1DHists',['../namespacepython_1_1plotting.html#a299b2acd01d8e1d8d646a72164323fca',1,'python::plotting']]], - ['run_893',['Run',['../classch_1_1_c_m_s_hist_func_factory.html#a4e057f77b7fcdde3e98967bb5632717e',1,'ch::CMSHistFuncFactory::Run(CombineHarvester &cb, RooWorkspace &ws, std::map< std::string, std::string > process_vs_norm_postfix_map)'],['../classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60',1,'ch::CMSHistFuncFactory::Run(CombineHarvester &cb, RooWorkspace &ws)']]] + ['range_5fd_803',['range_d',['../classch_1_1_parameter.html#ad0cf0c6b5ad729e7c991ab468bc9f8d2',1,'ch::Parameter']]], + ['range_5fu_804',['range_u',['../classch_1_1_parameter.html#ade82fbedd8ad452e061b84f58e8ed8f8',1,'ch::Parameter']]], + ['rate_805',['rate',['../classch_1_1_observation.html#aa82898ea9469ea6e9346410bfe4b9754',1,'ch::Observation::rate()'],['../classch_1_1_process.html#a4683fb53999bbc1cbefb5637a4843e55',1,'ch::Process::rate()']]], + ['rebin_806',['Rebin',['../classch_1_1_auto_rebin.html#af9525ed197d8b5742695c729645ea4a2',1,'ch::AutoRebin']]], + ['rebinhist_807',['RebinHist',['../namespacech.html#a2cbcfd049543bfe9f63958bc671deeae',1,'ch']]], + ['removegroup_808',['RemoveGroup',['../classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810',1,'ch::CombineHarvester']]], + ['renameautomcstatsbin_809',['RenameAutoMCStatsBin',['../classch_1_1_combine_harvester.html#a44d791bc4812feb68729e7660fd3e5b3',1,'ch::CombineHarvester']]], + ['renamegroup_810',['RenameGroup',['../classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9',1,'ch::CombineHarvester']]], + ['renameparameter_811',['RenameParameter',['../classch_1_1_combine_harvester.html#a2825b9eeec47f7b23f93520bf615b581',1,'ch::CombineHarvester']]], + ['renameparinws_812',['renameParInWs',['../classch_1_1_combine_harvester.html#a45dc5b119b4c0618c0f3e614d48ae2d6',1,'ch::CombineHarvester']]], + ['renamesystematic_813',['RenameSystematic',['../classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9',1,'ch::CombineHarvester']]], + ['restorebinning_814',['RestoreBinning',['../namespacech.html#a23cd9444931a49de080638458f722501',1,'ch']]], + ['reversebins_815',['ReverseBins',['../_post_fit_shapes_from_workspace_8cpp.html#a48acb519f981bec18bc41e658431176d',1,'PostFitShapesFromWorkspace.cpp']]], + ['rezerotgraph_816',['ReZeroTGraph',['../_plotting_8h.html#af2524f9f02ac66a16164c87bfc149628',1,'Plotting.h']]], + ['run_817',['Run',['../classch_1_1_c_m_s_hist_func_factory.html#a4e057f77b7fcdde3e98967bb5632717e',1,'ch::CMSHistFuncFactory::Run(CombineHarvester &cb, RooWorkspace &ws, std::map< std::string, std::string > process_vs_norm_postfix_map)'],['../classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60',1,'ch::CMSHistFuncFactory::Run(CombineHarvester &cb, RooWorkspace &ws)']]] ]; diff --git a/search/mag_sel.png b/search/mag_sel.png deleted file mode 100644 index 39c0ed52a25dd9d080ee0d42ae6c6042bdfa04d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB$N=!mC_V~EE2vzPXI9ZnEo zd+1zHor@dYLod2Y{ z@R$7$Z!PXTbY$|@#T!bMzm?`b<(R`cbw(gxJHzu zB$lLFB^RXvDF!10LknF)BV7aY5JN*NBMU1-b8Q0yD+2>vd*|CI8glbfGSez?Ylunu RoetE%;OXk;vd$@?2>>CYplSdB diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 00000000000..03626f64a02 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/search/namespaces_0.html b/search/namespaces_0.html index 93c99f9db12..21db2c3a565 100644 --- a/search/namespaces_0.html +++ b/search/namespaces_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/namespaces_0.js b/search/namespaces_0.js index d502196e111..7df30f1bfe1 100644 --- a/search/namespaces_0.js +++ b/search/namespaces_0.js @@ -1,7 +1,7 @@ var searchData= [ - ['ch_553',['ch',['../namespacech.html',1,'']]], - ['detail_554',['detail',['../namespacech_1_1syst_1_1detail.html',1,'ch::syst']]], - ['syst_555',['syst',['../namespacech_1_1syst.html',1,'ch']]], - ['tupleprint_556',['tupleprint',['../namespacech_1_1tupleprint.html',1,'ch']]] + ['ch_510',['ch',['../namespacech.html',1,'']]], + ['detail_511',['detail',['../namespacech_1_1syst_1_1detail.html',1,'ch::syst']]], + ['syst_512',['syst',['../namespacech_1_1syst.html',1,'ch']]], + ['tupleprint_513',['tupleprint',['../namespacech_1_1tupleprint.html',1,'ch']]] ]; diff --git a/search/namespaces_1.html b/search/namespaces_1.html index fed914cd7a6..a01efeb1ec2 100644 --- a/search/namespaces_1.html +++ b/search/namespaces_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/namespaces_1.js b/search/namespaces_1.js index a628c43f9bf..64434d3a859 100644 --- a/search/namespaces_1.js +++ b/search/namespaces_1.js @@ -1,5 +1,4 @@ var searchData= [ - ['plotting_557',['plotting',['../namespacepython_1_1plotting.html',1,'python']]], - ['python_558',['python',['../namespacepython.html',1,'']]] + ['plotting_514',['plotting',['../namespaceplotting.html',1,'']]] ]; diff --git a/search/nomatches.html b/search/nomatches.html index 4377320895b..2b9360b6bd7 100644 --- a/search/nomatches.html +++ b/search/nomatches.html @@ -1,5 +1,6 @@ - + + diff --git a/search/pages_0.html b/search/pages_0.html index 32cbf49809b..8517b48f05d 100644 --- a/search/pages_0.html +++ b/search/pages_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_0.js b/search/pages_0.js index 6b621cea7ed..e42288a86aa 100644 --- a/search/pages_0.js +++ b/search/pages_0.js @@ -1,5 +1,5 @@ var searchData= [ - ['bsm_20model_20independent_20limits_20using_20morphinghhh_20or_20morphingazh_1063',['BSM Model independent Limits using MorphingHhh or MorphingAZh',['../_model_indep_hhh_a_zh.html',1,'']]], - ['bsm_20model_20independent_20limits_20using_20morphingmssmupdate_1064',['BSM Model independent Limits using MorphingMSSMUpdate',['../_m_s_s_m_update_no_model.html',1,'']]] + ['bsm_20model_20independent_20limits_20using_20morphinghhh_20or_20morphingazh_973',['BSM Model independent Limits using MorphingHhh or MorphingAZh',['../_model_indep_hhh_a_zh.html',1,'']]], + ['bsm_20model_20independent_20limits_20using_20morphingmssmupdate_974',['BSM Model independent Limits using MorphingMSSMUpdate',['../_m_s_s_m_update_no_model.html',1,'']]] ]; diff --git a/search/pages_1.html b/search/pages_1.html index 86c9cd3a296..a0fb679631b 100644 --- a/search/pages_1.html +++ b/search/pages_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_1.js b/search/pages_1.js index 55b27710c7e..88111611e1d 100644 --- a/search/pages_1.js +++ b/search/pages_1.js @@ -1,5 +1,5 @@ var searchData= [ - ['charged_20higgs_20datacards_20with_20roomorphingpdf_1065',['Charged Higgs datacards with RooMorphingPdf',['../md_docs__charged_higgs.html',1,'']]], - ['calculating_20grids_20of_20cls_20values_20using_20toys_1066',['Calculating grids of CLs values using toys',['../md_docs__hybrid_new_grid.html',1,'']]] + ['calculating_20grids_20of_20cls_20values_20using_20toys_975',['Calculating grids of CLs values using toys',['../md_docs__hybrid_new_grid.html',1,'']]], + ['charged_20higgs_20datacards_20with_20roomorphingpdf_976',['Charged Higgs datacards with RooMorphingPdf',['../md_docs__charged_higgs.html',1,'']]] ]; diff --git a/search/pages_2.html b/search/pages_2.html index 0c8adf59439..084edfd03f7 100644 --- a/search/pages_2.html +++ b/search/pages_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_2.js b/search/pages_2.js index 852baed5676..5be2fa484d1 100644 --- a/search/pages_2.js +++ b/search/pages_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['deprecated_20list_1067',['Deprecated List',['../deprecated.html',1,'']]] + ['deprecated_20list_977',['Deprecated List',['../deprecated.html',1,'']]] ]; diff --git a/search/pages_3.html b/search/pages_3.html index 7c591a21cc9..c0b45b0fc93 100644 --- a/search/pages_3.html +++ b/search/pages_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_3.js b/search/pages_3.js index 95f47eaaf4d..63b4ee84039 100644 --- a/search/pages_3.js +++ b/search/pages_3.js @@ -1,6 +1,6 @@ var searchData= [ - ['examples_20part_20i_1068',['Examples Part I',['../intro1.html',1,'']]], - ['examples_20part_20ii_1069',['Examples Part II',['../intro2.html',1,'']]], - ['examples_20part_20iii_1070',['Examples Part III',['../intro3.html',1,'']]] + ['examples_20part_20i_978',['Examples Part I',['../intro1.html',1,'']]], + ['examples_20part_20ii_979',['Examples Part II',['../intro2.html',1,'']]], + ['examples_20part_20iii_980',['Examples Part III',['../intro3.html',1,'']]] ]; diff --git a/search/pages_4.html b/search/pages_4.html index 63ed7c7a509..0f05c2e73c0 100644 --- a/search/pages_4.html +++ b/search/pages_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_4.js b/search/pages_4.js index dc8d75980e3..a55463c2ff7 100644 --- a/search/pages_4.js +++ b/search/pages_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['introduction_1071',['Introduction',['../index.html',1,'']]] + ['introduction_981',['Introduction',['../index.html',1,'']]] ]; diff --git a/search/pages_5.html b/search/pages_5.html index 5ef74ebf44c..27e2b6c7832 100644 --- a/search/pages_5.html +++ b/search/pages_5.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_5.js b/search/pages_5.js index f71ec086556..d2302edf5a3 100644 --- a/search/pages_5.js +++ b/search/pages_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['limits_1072',['Limits',['../limits.html',1,'']]] + ['limits_982',['Limits',['../limits.html',1,'']]] ]; diff --git a/search/pages_6.html b/search/pages_6.html index cd867a080ed..39300b60e0c 100644 --- a/search/pages_6.html +++ b/search/pages_6.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_6.js b/search/pages_6.js index 53d1dbd1127..1764a1320cb 100644 --- a/search/pages_6.js +++ b/search/pages_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['model_20dependent_20limits_20using_20morphingmssmupdate_1073',['Model dependent Limits using MorphingMSSMUpdate',['../_m_s_s_m_update_model_dep.html',1,'']]] + ['model_20dependent_20limits_20using_20morphingmssmupdate_983',['Model dependent Limits using MorphingMSSMUpdate',['../_m_s_s_m_update_model_dep.html',1,'']]] ]; diff --git a/search/pages_7.html b/search/pages_7.html index 2a0841fc219..c005fe51cdf 100644 --- a/search/pages_7.html +++ b/search/pages_7.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_7.js b/search/pages_7.js index da65adc33ac..7bef0bfe88c 100644 --- a/search/pages_7.js +++ b/search/pages_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['post_2dfit_20distributions_1074',['Post-fit Distributions',['../post-fit-shapes-ws.html',1,'']]], - ['python_20interface_1075',['Python Interface',['../python-interface.html',1,'']]] + ['post_2dfit_20distributions_984',['Post-fit Distributions',['../post-fit-shapes-ws.html',1,'']]], + ['python_20interface_985',['Python Interface',['../python-interface.html',1,'']]] ]; diff --git a/search/pages_8.html b/search/pages_8.html index b30ace9b4ef..c942aa20ca0 100644 --- a/search/pages_8.html +++ b/search/pages_8.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/pages_8.js b/search/pages_8.js index 3aea9bf0b61..5d2c767ab2e 100644 --- a/search/pages_8.js +++ b/search/pages_8.js @@ -1,5 +1,5 @@ var searchData= [ - ['roomorphingpdf_1076',['RooMorphingPdf',['../intro_morph.html',1,'']]], - ['reproducing_20run_201_20h_2d_3etautau_20results_1077',['Reproducing Run 1 H->tautau results',['../introrun1_h_t_t.html',1,'']]] + ['reproducing_20run_201_20h_2d_3etautau_20results_986',['Reproducing Run 1 H->tautau results',['../introrun1_h_t_t.html',1,'']]], + ['roomorphingpdf_987',['RooMorphingPdf',['../intro_morph.html',1,'']]] ]; diff --git a/search/related_0.html b/search/related_0.html index 530c782fabb..506aaecc0cf 100644 --- a/search/related_0.html +++ b/search/related_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/related_0.js b/search/related_0.js index a3781cc739a..1f7efed59cf 100644 --- a/search/related_0.js +++ b/search/related_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['operator_3c_3c_1056',['operator<<',['../structch_1_1_hist_mapping.html#a082b489ab66940ac856997bfcd1ced7a',1,'ch::HistMapping::operator<<()'],['../classch_1_1_observation.html#a987488ba4dcac7dee972febeeab0b648',1,'ch::Observation::operator<<()'],['../classch_1_1_parameter.html#a4b23aafe9b144c9d6affc3a86d1efeb5',1,'ch::Parameter::operator<<()'],['../classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29',1,'ch::Process::operator<<()'],['../classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8',1,'ch::Systematic::operator<<()']]] + ['operator_3c_3c_966',['operator<<',['../structch_1_1_hist_mapping.html#a082b489ab66940ac856997bfcd1ced7a',1,'ch::HistMapping::operator<<()'],['../classch_1_1_observation.html#a987488ba4dcac7dee972febeeab0b648',1,'ch::Observation::operator<<()'],['../classch_1_1_parameter.html#a4b23aafe9b144c9d6affc3a86d1efeb5',1,'ch::Parameter::operator<<()'],['../classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29',1,'ch::Process::operator<<()'],['../classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8',1,'ch::Systematic::operator<<()']]] ]; diff --git a/search/related_1.html b/search/related_1.html index 8bf9e0714a5..605d4b78f73 100644 --- a/search/related_1.html +++ b/search/related_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/related_1.js b/search/related_1.js index 6611a211e24..72d0fc2a737 100644 --- a/search/related_1.js +++ b/search/related_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['swap_1057',['swap',['../classch_1_1_combine_harvester.html#a6b7c11550052d3edd98cd0971280ff79',1,'ch::CombineHarvester::swap()'],['../classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603',1,'ch::Object::swap()'],['../classch_1_1_observation.html#a89be1a9e99b14efd3d528195c3f8eb88',1,'ch::Observation::swap()'],['../classch_1_1_parameter.html#ab9f57f473beb19a385c769a104aee7cc',1,'ch::Parameter::swap()'],['../classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa',1,'ch::Process::swap()'],['../classch_1_1_systematic.html#ae72c57591746155a32cd36adc350e92a',1,'ch::Systematic::swap()']]] + ['swap_967',['swap',['../classch_1_1_combine_harvester.html#a6b7c11550052d3edd98cd0971280ff79',1,'ch::CombineHarvester::swap()'],['../classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603',1,'ch::Object::swap()'],['../classch_1_1_observation.html#a89be1a9e99b14efd3d528195c3f8eb88',1,'ch::Observation::swap()'],['../classch_1_1_parameter.html#ab9f57f473beb19a385c769a104aee7cc',1,'ch::Parameter::swap()'],['../classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa',1,'ch::Process::swap()'],['../classch_1_1_systematic.html#ae72c57591746155a32cd36adc350e92a',1,'ch::Systematic::swap()']]] ]; diff --git a/search/search.js b/search/search.js index a554ab9cb52..fb226f734e6 100644 --- a/search/search.js +++ b/search/search.js @@ -1,25 +1,26 @@ /* - @licstart The following is the entire license notice for the - JavaScript code in this file. + @licstart The following is the entire license notice for the JavaScript code in this file. - Copyright (C) 1997-2017 by Dimitri van Heesch + The MIT License (MIT) - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + Copyright (C) 1997-2020 by Dimitri van Heesch - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. - @licend The above is the entire license notice - for the JavaScript code in this file + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file */ function convertToId(search) { @@ -79,9 +80,10 @@ function getYPos(item) storing this instance. Is needed to be able to set timeouts. resultPath - path to use for external files */ -function SearchBox(name, resultsPath, inFrame, label) +function SearchBox(name, resultsPath, inFrame, label, extension) { if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } // ---------- Instance variables this.name = name; @@ -96,6 +98,7 @@ function SearchBox(name, resultsPath, inFrame, label) this.searchActive = false; this.insideFrame = inFrame; this.searchLabel = label; + this.extension = extension; // ----------- DOM Elements @@ -200,10 +203,9 @@ function SearchBox(name, resultsPath, inFrame, label) } return; } - else if (window.frames.MSearchResults.searchResults) + else { - var elem = window.frames.MSearchResults.searchResults.NavNext(0); - if (elem) elem.focus(); + window.frames.MSearchResults.postMessage("take_focus", "*"); } } else if (e.keyCode==27) // Escape out of the search field @@ -347,13 +349,13 @@ function SearchBox(name, resultsPath, inFrame, label) if (idx!=-1) { var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; } else // nothing available for this search term { - resultsPage = this.resultsPath + '/nomatches.html'; + resultsPage = this.resultsPath + '/nomatches' + this.extension; resultsPageWithSearch = resultsPage; hasResultsPage = false; } @@ -364,7 +366,7 @@ function SearchBox(name, resultsPath, inFrame, label) if (domPopupSearchResultsWindow.style.display!='block') { var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; + this.DOMSearchClose().style.display = 'inline-block'; if (this.insideFrame) { var domPopupSearchResults = this.DOMPopupSearchResults(); @@ -439,12 +441,12 @@ function SearchResults(name) while (element && element!=parentElement) { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { return element; } - if (element.nodeName == 'DIV' && element.hasChildNodes()) + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { element = element.firstChild; } diff --git a/search/typedefs_0.html b/search/typedefs_0.html index 8f30b85cf0a..a4684c4ad28 100644 --- a/search/typedefs_0.html +++ b/search/typedefs_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/typedefs_0.js b/search/typedefs_0.js index cfc7ce846c5..fc1b4ac014b 100644 --- a/search/typedefs_0.js +++ b/search/typedefs_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['categories_1053',['Categories',['../namespacech.html#aa97b500b98aeaa86756eb1c5395a866e',1,'ch']]] + ['categories_963',['Categories',['../namespacech.html#aa97b500b98aeaa86756eb1c5395a866e',1,'ch']]] ]; diff --git a/search/typedefs_1.html b/search/typedefs_1.html index 0cfdad74f46..46cf01e62b3 100644 --- a/search/typedefs_1.html +++ b/search/typedefs_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/typedefs_1.js b/search/typedefs_1.js index b07bb8383a1..5a85a2a1209 100644 --- a/search/typedefs_1.js +++ b/search/typedefs_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['json_1054',['json',['../namespacech.html#a9ce1f37a56b1499707629dc77b9f7853',1,'ch']]] + ['json_964',['json',['../namespacech.html#a9ce1f37a56b1499707629dc77b9f7853',1,'ch']]] ]; diff --git a/search/typedefs_2.html b/search/typedefs_2.html index d633f0cef99..6835ee65b46 100644 --- a/search/typedefs_2.html +++ b/search/typedefs_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/typedefs_2.js b/search/typedefs_2.js index be3834d656f..50c9e409f25 100644 --- a/search/typedefs_2.js +++ b/search/typedefs_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['type_1055',['type',['../structch_1_1syst_1_1bin.html#a49d56f888416be832718d0ca180c0f5e',1,'ch::syst::bin::type()'],['../structch_1_1syst_1_1analysis.html#a11b01686f41ab63649080f7bc4aa9aaa',1,'ch::syst::analysis::type()'],['../structch_1_1syst_1_1era.html#a3efbe3d6162bf81819ebc883e6c6ffda',1,'ch::syst::era::type()'],['../structch_1_1syst_1_1channel.html#a7d239a5cff7e76f49e2b64b31346d094',1,'ch::syst::channel::type()'],['../structch_1_1syst_1_1mass.html#a0938bfa4855dfc837563804b4027de58',1,'ch::syst::mass::type()'],['../structch_1_1syst_1_1process.html#a92c10a4f56d6b72940dc816ef6421943',1,'ch::syst::process::type()'],['../classch_1_1syst_1_1bin__id.html#a6e658f07679ce2104ccd1944118dc734',1,'ch::syst::bin_id::type()']]] + ['type_965',['type',['../structch_1_1syst_1_1bin.html#a49d56f888416be832718d0ca180c0f5e',1,'ch::syst::bin::type()'],['../structch_1_1syst_1_1analysis.html#a11b01686f41ab63649080f7bc4aa9aaa',1,'ch::syst::analysis::type()'],['../structch_1_1syst_1_1era.html#a3efbe3d6162bf81819ebc883e6c6ffda',1,'ch::syst::era::type()'],['../structch_1_1syst_1_1channel.html#a7d239a5cff7e76f49e2b64b31346d094',1,'ch::syst::channel::type()'],['../structch_1_1syst_1_1mass.html#a0938bfa4855dfc837563804b4027de58',1,'ch::syst::mass::type()'],['../structch_1_1syst_1_1process.html#a92c10a4f56d6b72940dc816ef6421943',1,'ch::syst::process::type()'],['../classch_1_1syst_1_1bin__id.html#a6e658f07679ce2104ccd1944118dc734',1,'ch::syst::bin_id::type()']]] ]; diff --git a/search/variables_0.html b/search/variables_0.html index a2a3ae62567..1e477c08c4e 100644 --- a/search/variables_0.html +++ b/search/variables_0.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_0.js b/search/variables_0.js index 197abecbc3f..d9dba94437a 100644 --- a/search/variables_0.js +++ b/search/variables_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['b_1034',['b',['../structch_1_1_s_over_b_info.html#a4b9f6bf1c14831274dd072306f69c5ef',1,'ch::SOverBInfo']]] + ['b_945',['b',['../structch_1_1_s_over_b_info.html#a4b9f6bf1c14831274dd072306f69c5ef',1,'ch::SOverBInfo']]] ]; diff --git a/search/variables_1.html b/search/variables_1.html index b243c423774..ea73d9a494f 100644 --- a/search/variables_1.html +++ b/search/variables_1.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_1.js b/search/variables_1.js index aa94f38080a..f9fcd2e9be1 100644 --- a/search/variables_1.js +++ b/search/variables_1.js @@ -1,7 +1,6 @@ var searchData= [ - ['category_1035',['category',['../structch_1_1_hist_mapping.html#a3f5bb3146facf941b757e6af4c0ac857',1,'ch::HistMapping']]], - ['cats_5fint_1036',['cats_int',['../struct_col_info.html#ac7f91521ac9e960f88219cbf4e3d4bbc',1,'ColInfo']]], - ['cats_5fstr_1037',['cats_str',['../struct_col_info.html#a093fee09d59006ef45bd76ff503e931e',1,'ColInfo']]], - ['col_5fstore_1038',['COL_STORE',['../namespacepython_1_1plotting.html#a9dd11f8a47a545cac3a5e35ccac70075',1,'python::plotting']]] + ['category_946',['category',['../structch_1_1_hist_mapping.html#a3f5bb3146facf941b757e6af4c0ac857',1,'ch::HistMapping']]], + ['cats_5fint_947',['cats_int',['../struct_col_info.html#ac7f91521ac9e960f88219cbf4e3d4bbc',1,'ColInfo']]], + ['cats_5fstr_948',['cats_str',['../struct_col_info.html#a093fee09d59006ef45bd76ff503e931e',1,'ColInfo']]] ]; diff --git a/search/variables_2.html b/search/variables_2.html index 647df20ffd3..0580462e9c8 100644 --- a/search/variables_2.html +++ b/search/variables_2.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_2.js b/search/variables_2.js index a6a1f1e4244..8febba75d48 100644 --- a/search/variables_2.js +++ b/search/variables_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['era_1039',['era',['../struct_col_info.html#a218c046b7cd01eff65b5adcdb39169c5',1,'ColInfo']]] + ['era_949',['era',['../struct_col_info.html#a218c046b7cd01eff65b5adcdb39169c5',1,'ColInfo']]] ]; diff --git a/search/variables_3.html b/search/variables_3.html index 9dc9b89ed24..0d69e761935 100644 --- a/search/variables_3.html +++ b/search/variables_3.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_3.js b/search/variables_3.js index 4b13aadccb1..8225d5b798e 100644 --- a/search/variables_3.js +++ b/search/variables_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['file_1040',['file',['../structch_1_1_hist_mapping.html#a3a7318d36a94d5902b6da6382051efd8',1,'ch::HistMapping']]] + ['file_950',['file',['../structch_1_1_hist_mapping.html#a3a7318d36a94d5902b6da6382051efd8',1,'ch::HistMapping']]] ]; diff --git a/search/variables_4.html b/search/variables_4.html index 78cc2c70945..a4b6506bb53 100644 --- a/search/variables_4.html +++ b/search/variables_4.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_4.js b/search/variables_4.js index 4d707c2090b..cf24eed91e2 100644 --- a/search/variables_4.js +++ b/search/variables_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['is_5ffake_1041',['is_fake',['../structch_1_1_hist_mapping.html#ae18110c613c02c72501d599f71e26dfb',1,'ch::HistMapping']]] + ['is_5ffake_951',['is_fake',['../structch_1_1_hist_mapping.html#ae18110c613c02c72501d599f71e26dfb',1,'ch::HistMapping']]] ]; diff --git a/search/variables_5.html b/search/variables_5.html index dfa355882fa..7e345d16c9f 100644 --- a/search/variables_5.html +++ b/search/variables_5.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_5.js b/search/variables_5.js index 4f17c738641..13bd19d0a84 100644 --- a/search/variables_5.js +++ b/search/variables_5.js @@ -1,5 +1,5 @@ var searchData= [ - ['label_1042',['label',['../struct_col_info.html#ae8b8720618660a433e3965c626a00580',1,'ColInfo::label()'],['../struct_bkg_info.html#a2550b7e9b4c739ee582288e1e1b493b2',1,'BkgInfo::label()']]], - ['lumi_1043',['lumi',['../struct_col_info.html#a89d79108973a299d202a3c3029aacaf6',1,'ColInfo']]] + ['label_952',['label',['../struct_col_info.html#ae8b8720618660a433e3965c626a00580',1,'ColInfo::label()'],['../struct_bkg_info.html#a2550b7e9b4c739ee582288e1e1b493b2',1,'BkgInfo::label()']]], + ['lumi_953',['lumi',['../struct_col_info.html#a89d79108973a299d202a3c3029aacaf6',1,'ColInfo']]] ]; diff --git a/search/variables_6.html b/search/variables_6.html index cd462bde726..7d48e75e27e 100644 --- a/search/variables_6.html +++ b/search/variables_6.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_6.js b/search/variables_6.js index 4ea340f0d15..c9b5c8fd6be 100644 --- a/search/variables_6.js +++ b/search/variables_6.js @@ -1,6 +1,6 @@ var searchData= [ - ['pattern_1044',['pattern',['../structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310',1,'ch::HistMapping']]], - ['process_1045',['process',['../structch_1_1_hist_mapping.html#aa63cc6db2afbb37ee7559452b7966816',1,'ch::HistMapping']]], - ['procs_1046',['procs',['../struct_bkg_info.html#ae3185634cdea6c4c5d468767a4c41292',1,'BkgInfo']]] + ['pattern_954',['pattern',['../structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310',1,'ch::HistMapping']]], + ['process_955',['process',['../structch_1_1_hist_mapping.html#aa63cc6db2afbb37ee7559452b7966816',1,'ch::HistMapping']]], + ['procs_956',['procs',['../struct_bkg_info.html#ae3185634cdea6c4c5d468767a4c41292',1,'BkgInfo']]] ]; diff --git a/search/variables_7.html b/search/variables_7.html index 47994b80fc8..5c26340927b 100644 --- a/search/variables_7.html +++ b/search/variables_7.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_7.js b/search/variables_7.js index 400be6d9b78..b82f8b3425c 100644 --- a/search/variables_7.js +++ b/search/variables_7.js @@ -1,6 +1,6 @@ var searchData= [ - ['s_1047',['s',['../structch_1_1_s_over_b_info.html#aa596edaf3d5bcea0af28583b362a33c2',1,'ch::SOverBInfo']]], - ['sys_5fws_1048',['sys_ws',['../structch_1_1_hist_mapping.html#addf039e15f8e0331e04e90f7d05b7122',1,'ch::HistMapping']]], - ['syst_5fpattern_1049',['syst_pattern',['../structch_1_1_hist_mapping.html#ab8e25efafca82f1152d94819130157d2',1,'ch::HistMapping']]] + ['s_957',['s',['../structch_1_1_s_over_b_info.html#aa596edaf3d5bcea0af28583b362a33c2',1,'ch::SOverBInfo']]], + ['sys_5fws_958',['sys_ws',['../structch_1_1_hist_mapping.html#addf039e15f8e0331e04e90f7d05b7122',1,'ch::HistMapping']]], + ['syst_5fpattern_959',['syst_pattern',['../structch_1_1_hist_mapping.html#ab8e25efafca82f1152d94819130157d2',1,'ch::HistMapping']]] ]; diff --git a/search/variables_8.html b/search/variables_8.html index a50ee8f56b5..dc9ec54a5b7 100644 --- a/search/variables_8.html +++ b/search/variables_8.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_8.js b/search/variables_8.js index 75d81a10e4c..bd49c9abb97 100644 --- a/search/variables_8.js +++ b/search/variables_8.js @@ -1,4 +1,4 @@ var searchData= [ - ['ws_1050',['ws',['../structch_1_1_hist_mapping.html#ad83659fc57397fca2243f3ad26eb44a7',1,'ch::HistMapping']]] + ['ws_960',['ws',['../structch_1_1_hist_mapping.html#ad83659fc57397fca2243f3ad26eb44a7',1,'ch::HistMapping']]] ]; diff --git a/search/variables_9.html b/search/variables_9.html index 82db8aedcf9..7b0147509e7 100644 --- a/search/variables_9.html +++ b/search/variables_9.html @@ -1,7 +1,8 @@ - + + - + @@ -10,21 +11,27 @@
    Loading...
    - +
    Searching...
    No Matches
    - +
    diff --git a/search/variables_9.js b/search/variables_9.js index 59c22a2105a..cf7e6f2cda7 100644 --- a/search/variables_9.js +++ b/search/variables_9.js @@ -1,5 +1,5 @@ var searchData= [ - ['x_5fhi_1051',['x_hi',['../structch_1_1_s_over_b_info.html#a0756a714ee23117ba20c261e9c03c924',1,'ch::SOverBInfo']]], - ['x_5flo_1052',['x_lo',['../structch_1_1_s_over_b_info.html#ae94fc8af21cd3927f289993407ce417a',1,'ch::SOverBInfo']]] + ['x_5fhi_961',['x_hi',['../structch_1_1_s_over_b_info.html#a0756a714ee23117ba20c261e9c03c924',1,'ch::SOverBInfo']]], + ['x_5flo_962',['x_lo',['../structch_1_1_s_over_b_info.html#ae94fc8af21cd3927f289993407ce417a',1,'ch::SOverBInfo']]] ]; diff --git a/struct_bkg_info.html b/struct_bkg_info.html index 174ac2942e9..b29ba8c799f 100644 --- a/struct_bkg_info.html +++ b/struct_bkg_info.html @@ -4,7 +4,7 @@ - + CombineHarvester: BkgInfo Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - +
    @@ -83,7 +80,7 @@
    diff --git a/struct_col_info.html b/struct_col_info.html index fc835a1f203..748a2fa0085 100644 --- a/struct_col_info.html +++ b/struct_col_info.html @@ -4,7 +4,7 @@ - + CombineHarvester: ColInfo Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - + @@ -83,7 +80,7 @@
    diff --git a/structch_1_1_hist_mapping.html b/structch_1_1_hist_mapping.html index a10325f4202..f8a8be4b2bf 100644 --- a/structch_1_1_hist_mapping.html +++ b/structch_1_1_hist_mapping.html @@ -4,7 +4,7 @@ - + CombineHarvester: ch::HistMapping Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@
    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    @@ -64,10 +61,10 @@
    - + @@ -83,7 +80,7 @@
    @@ -111,7 +108,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/HistMapping.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/HistMapping.h"

    diff --git a/structch_1_1_s_over_b_info.html b/structch_1_1_s_over_b_info.html index e2bd35f5e31..88b280d814f 100644 --- a/structch_1_1_s_over_b_info.html +++ b/structch_1_1_s_over_b_info.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::SOverBInfo Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Public Member Functions

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -110,7 +107,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/SOverBTools.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/SOverBTools.h"

    diff --git a/structch_1_1syst_1_1analysis.html b/structch_1_1syst_1_1analysis.html index f95fda02d13..cf0ad11fda5 100644 --- a/structch_1_1syst_1_1analysis.html +++ b/structch_1_1syst_1_1analysis.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::analysis Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Public Member Functions

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -110,7 +107,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/Systematics.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

    diff --git a/structch_1_1syst_1_1bin.html b/structch_1_1syst_1_1bin.html index 4872b91e1ad..877be7d859f 100644 --- a/structch_1_1syst_1_1bin.html +++ b/structch_1_1syst_1_1bin.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::bin Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Public Types

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -110,7 +107,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/Systematics.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

    diff --git a/structch_1_1syst_1_1channel.html b/structch_1_1syst_1_1channel.html index 612640ba293..0abd0cccdfe 100644 --- a/structch_1_1syst_1_1channel.html +++ b/structch_1_1syst_1_1channel.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::channel Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Public Types

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -110,7 +107,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/Systematics.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

    diff --git a/structch_1_1syst_1_1era.html b/structch_1_1syst_1_1era.html index fed11b96204..730638ab624 100644 --- a/structch_1_1syst_1_1era.html +++ b/structch_1_1syst_1_1era.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::era Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Public Types

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -110,7 +107,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/Systematics.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

    diff --git a/structch_1_1syst_1_1mass.html b/structch_1_1syst_1_1mass.html index c43736aa62c..0aa0477bca8 100644 --- a/structch_1_1syst_1_1mass.html +++ b/structch_1_1syst_1_1mass.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::mass Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Public Types

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -110,7 +107,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/Systematics.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

    diff --git a/structch_1_1syst_1_1process.html b/structch_1_1syst_1_1process.html index 5e592d78693..5aa590374be 100644 --- a/structch_1_1syst_1_1process.html +++ b/structch_1_1syst_1_1process.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::syst::process Struct Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Public Types

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -110,7 +107,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/Systematics.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Systematics.h"

    diff --git a/structch_1_1tupleprint_1_1_tuple_printer.html b/structch_1_1tupleprint_1_1_tuple_printer.html index 2e4614908cf..3411a17f9d6 100644 --- a/structch_1_1tupleprint_1_1_tuple_printer.html +++ b/structch_1_1tupleprint_1_1_tuple_printer.html @@ -4,7 +4,7 @@ - +CombineHarvester: ch::tupleprint::TuplePrinter< Tuple, N > Struct Template Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Public Types

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -109,7 +106,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/Utilities.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Utilities.h"

    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 0c6b0afecab..ed7e2108f16 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 @@ -4,7 +4,7 @@ - +CombineHarvester: ch::tupleprint::TuplePrinter< Tuple, 0 > Struct Template Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Static Public Member Functions

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -109,7 +106,7 @@
    -

    #include "CombineHarvester/CombineTools/interface/Utilities.h"

    +

    #include "/afs/cern.ch/user/a/agilbert/CMSSW_14_1_0_pre4/src/CombineHarvester/CombineTools/interface/Utilities.h"

    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 473d481fe36..6f4ec8d5115 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 @@ -4,7 +4,7 @@ - +CombineHarvester: ch::tupleprint::TuplePrinter< Tuple, 1 > Struct Template Reference @@ -13,10 +13,6 @@ - @@ -30,7 +26,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -46,7 +43,7 @@ @@ -64,10 +61,10 @@

    Static Public Member Functions

    - @@ -55,7 +52,7 @@ onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> - +
    - + @@ -83,7 +80,7 @@
    @@ -109,7 +106,7 @@