diff --git a/macros/examples/BarrelSATURATED_Log_sig3_FAlpha_evts100/fres.root b/macros/examples/BarrelSATURATED_Log_sig3_FAlpha_evts100/fres.root new file mode 100644 index 0000000..8e75704 Binary files /dev/null and b/macros/examples/BarrelSATURATED_Log_sig3_FAlpha_evts100/fres.root differ diff --git a/macros/examples/BarrelSATURATED_Log_sig3_FAlpha_evts100/wereg_ph_eb.root b/macros/examples/BarrelSATURATED_Log_sig3_FAlpha_evts100/wereg_ph_eb.root new file mode 100644 index 0000000..ede79ca Binary files /dev/null and b/macros/examples/BarrelSATURATED_Log_sig3_FAlpha_evts100/wereg_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawE_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawE_ph_eb.png new file mode 100644 index 0000000..09fd420 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawE_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawElog_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawElog_ph_eb.png new file mode 100644 index 0000000..0ce18fa Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawElog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawElog_ph_eb.root b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawElog_ph_eb.root new file mode 100644 index 0000000..9b6d13e Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/RawElog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/a1_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/a1_ph_eb.png new file mode 100644 index 0000000..f35f1f7 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/a1_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/a2_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/a2_ph_eb.png new file mode 100644 index 0000000..b3144b9 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/a2_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/corrected_energy_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/corrected_energy_ph_eb.png new file mode 100644 index 0000000..bd958bb Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/corrected_energy_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/corrected_energy_ph_eb.root b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/corrected_energy_ph_eb.root new file mode 100644 index 0000000..14b6069 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/corrected_energy_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/eta_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/eta_ph_eb.png new file mode 100644 index 0000000..5c88ce0 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/eta_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/fres.root b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/fres.root new file mode 100644 index 0000000..5bd3f47 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/fres.root differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/mean_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/mean_ph_eb.png new file mode 100644 index 0000000..726f20a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/mean_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/n1_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/n1_ph_eb.png new file mode 100644 index 0000000..7a49749 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/n1_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/n2_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/n2_ph_eb.png new file mode 100644 index 0000000..4c061cc Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/n2_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/response_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/response_ph_eb.png new file mode 100644 index 0000000..524d9cb Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/response_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/responselog_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/responselog_ph_eb.png new file mode 100644 index 0000000..99f680a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/responselog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/responselog_ph_eb.root b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/responselog_ph_eb.root new file mode 100644 index 0000000..7f3bd01 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/responselog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/wereg_ph_eb.root b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/wereg_ph_eb.root new file mode 100644 index 0000000..0bd96dc Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/wereg_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_FAlpha__evts15/width_ph_eb.png b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/width_ph_eb.png new file mode 100644 index 0000000..61cbb31 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_FAlpha__evts15/width_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawE_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawE_ph_eb.png new file mode 100644 index 0000000..e4118cd Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawE_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawElog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawElog_ph_eb.png new file mode 100644 index 0000000..28f8cf9 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawElog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawElog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawElog_ph_eb.root new file mode 100644 index 0000000..7a9d25a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/RawElog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/corrected_energy_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/corrected_energy_ph_eb.png new file mode 100644 index 0000000..5dfb117 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/corrected_energy_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/corrected_energy_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/corrected_energy_ph_eb.root new file mode 100644 index 0000000..ad2a7cb Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/corrected_energy_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/eta_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/eta_ph_eb.png new file mode 100644 index 0000000..f382dc1 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/eta_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/fres.root b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/fres.root new file mode 100644 index 0000000..26f807c Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/fres.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/mean_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/mean_ph_eb.png new file mode 100644 index 0000000..861034f Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/mean_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/n1_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/n1_ph_eb.png new file mode 100644 index 0000000..8cc0c0a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/n1_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/n2_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/n2_ph_eb.png new file mode 100644 index 0000000..7d52fed Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/n2_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/response_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/response_ph_eb.png new file mode 100644 index 0000000..2b68c5b Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/response_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/responselog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/responselog_ph_eb.png new file mode 100644 index 0000000..71ea543 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/responselog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/responselog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/responselog_ph_eb.root new file mode 100644 index 0000000..85a9f0b Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/responselog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/wereg_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/wereg_ph_eb.root new file mode 100644 index 0000000..545a73a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/wereg_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/width_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/width_ph_eb.png new file mode 100644 index 0000000..484ca5c Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-1_evts_n100/width_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawE_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawE_ph_eb.png new file mode 100644 index 0000000..9e5badf Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawE_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawElog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawElog_ph_eb.png new file mode 100644 index 0000000..9642b39 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawElog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawElog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawElog_ph_eb.root new file mode 100644 index 0000000..6dd877b Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/RawElog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/corrected_energy_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/corrected_energy_ph_eb.png new file mode 100644 index 0000000..22580d6 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/corrected_energy_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/corrected_energy_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/corrected_energy_ph_eb.root new file mode 100644 index 0000000..e7a13c5 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/corrected_energy_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/eta_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/eta_ph_eb.png new file mode 100644 index 0000000..f382dc1 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/eta_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/fres.root b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/fres.root new file mode 100644 index 0000000..b0a369f Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/fres.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/mean_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/mean_ph_eb.png new file mode 100644 index 0000000..2633976 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/mean_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/n1_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/n1_ph_eb.png new file mode 100644 index 0000000..8cc0c0a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/n1_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/n2_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/n2_ph_eb.png new file mode 100644 index 0000000..a5afc03 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/n2_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/response_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/response_ph_eb.png new file mode 100644 index 0000000..39089f5 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/response_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/responselog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/responselog_ph_eb.png new file mode 100644 index 0000000..c32c144 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/responselog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/responselog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/responselog_ph_eb.root new file mode 100644 index 0000000..8e8fde9 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/responselog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/wereg_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/wereg_ph_eb.root new file mode 100644 index 0000000..010e5ec Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/wereg_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/width_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/width_ph_eb.png new file mode 100644 index 0000000..ebe6a68 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-2_evts_n100/width_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawE_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawE_ph_eb.png new file mode 100644 index 0000000..6c56706 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawE_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawElog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawElog_ph_eb.png new file mode 100644 index 0000000..f0d53f3 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawElog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawElog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawElog_ph_eb.root new file mode 100644 index 0000000..8ca2b17 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/RawElog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/corrected_energy_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/corrected_energy_ph_eb.png new file mode 100644 index 0000000..af53031 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/corrected_energy_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/corrected_energy_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/corrected_energy_ph_eb.root new file mode 100644 index 0000000..44e5664 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/corrected_energy_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/eta_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/eta_ph_eb.png new file mode 100644 index 0000000..f382dc1 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/eta_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/fres.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/fres.root new file mode 100644 index 0000000..0f6b5c9 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/fres.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/mean_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/mean_ph_eb.png new file mode 100644 index 0000000..ce3b697 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/mean_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/n1_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/n1_ph_eb.png new file mode 100644 index 0000000..78dad62 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/n1_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/n2_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/n2_ph_eb.png new file mode 100644 index 0000000..336b415 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/n2_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/response_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/response_ph_eb.png new file mode 100644 index 0000000..5945d7a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/response_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/responselog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/responselog_ph_eb.png new file mode 100644 index 0000000..8be0f1a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/responselog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/responselog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/responselog_ph_eb.root new file mode 100644 index 0000000..5ae9965 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/responselog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/wereg_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/wereg_ph_eb.root new file mode 100644 index 0000000..93368a5 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/wereg_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/width_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/width_ph_eb.png new file mode 100644 index 0000000..8105da6 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts100_n1000/width_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawE_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawE_ph_eb.png new file mode 100644 index 0000000..1e44ff2 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawE_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawElog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawElog_ph_eb.png new file mode 100644 index 0000000..101ed32 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawElog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawElog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawElog_ph_eb.root new file mode 100644 index 0000000..32c4580 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/RawElog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/corrected_energy_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/corrected_energy_ph_eb.png new file mode 100644 index 0000000..a5e306c Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/corrected_energy_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/corrected_energy_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/corrected_energy_ph_eb.root new file mode 100644 index 0000000..3f4c3e8 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/corrected_energy_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/eta_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/eta_ph_eb.png new file mode 100644 index 0000000..8eabddb Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/eta_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/fres.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/fres.root new file mode 100644 index 0000000..dd031eb Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/fres.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/mean_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/mean_ph_eb.png new file mode 100644 index 0000000..0cd1fe8 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/mean_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/n1_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/n1_ph_eb.png new file mode 100644 index 0000000..531c56b Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/n1_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/n2_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/n2_ph_eb.png new file mode 100644 index 0000000..fc99037 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/n2_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/response_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/response_ph_eb.png new file mode 100644 index 0000000..ac34d21 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/response_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/responselog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/responselog_ph_eb.png new file mode 100644 index 0000000..78c8a08 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/responselog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/responselog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/responselog_ph_eb.root new file mode 100644 index 0000000..3788f08 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/responselog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_nvtx_fit_cor_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_nvtx_fit_cor_eb.png new file mode 100644 index 0000000..80713a9 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_nvtx_fit_cor_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_nvtx_fit_raw_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_nvtx_fit_raw_eb.png new file mode 100644 index 0000000..a6536c5 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_nvtx_fit_raw_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_CMS2.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_CMS2.png new file mode 100644 index 0000000..ce8e304 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_CMS2.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_CMS2.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_CMS2.root new file mode 100644 index 0000000..25ec388 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_CMS2.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_fit_cor_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_fit_cor_eb.png new file mode 100644 index 0000000..0749bef Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_fit_cor_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_fit_raw_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_fit_raw_eb.png new file mode 100644 index 0000000..d7b5c75 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_pt_fit_raw_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9.png new file mode 100644 index 0000000..d998901 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9_fit_cor_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9_fit_cor_eb.png new file mode 100644 index 0000000..3b6693f Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9_fit_cor_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9_fit_raw_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9_fit_raw_eb.png new file mode 100644 index 0000000..49e0660 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/scale_vs_r9_fit_raw_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/wereg_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/wereg_ph_eb.root new file mode 100644 index 0000000..305ef86 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/wereg_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/width_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/width_ph_eb.png new file mode 100644 index 0000000..d24fc3f Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha2-3_evts15/width_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawE_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawE_ph_eb.png new file mode 100644 index 0000000..a53ecb6 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawE_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawElog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawElog_ph_eb.png new file mode 100644 index 0000000..5a2f337 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawElog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawElog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawElog_ph_eb.root new file mode 100644 index 0000000..2ca87a7 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/RawElog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/corrected_energy_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/corrected_energy_ph_eb.png new file mode 100644 index 0000000..1cc9d8a Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/corrected_energy_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/corrected_energy_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/corrected_energy_ph_eb.root new file mode 100644 index 0000000..1bd9bc4 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/corrected_energy_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/eta_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/eta_ph_eb.png new file mode 100644 index 0000000..f382dc1 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/eta_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/fres.root b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/fres.root new file mode 100644 index 0000000..224a166 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/fres.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/mean_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/mean_ph_eb.png new file mode 100644 index 0000000..48fdd7b Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/mean_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/n1_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/n1_ph_eb.png new file mode 100644 index 0000000..8ec6baa Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/n1_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/n2_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/n2_ph_eb.png new file mode 100644 index 0000000..5133838 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/n2_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/response_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/response_ph_eb.png new file mode 100644 index 0000000..3d22de6 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/response_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/responselog_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/responselog_ph_eb.png new file mode 100644 index 0000000..809c336 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/responselog_ph_eb.png differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/responselog_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/responselog_ph_eb.root new file mode 100644 index 0000000..df5aa70 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/responselog_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/wereg_ph_eb.root b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/wereg_ph_eb.root new file mode 100644 index 0000000..ba21e9e Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/wereg_ph_eb.root differ diff --git a/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/width_ph_eb.png b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/width_ph_eb.png new file mode 100644 index 0000000..4c365f6 Binary files /dev/null and b/macros/examples/Barrel_Log_sig3_alpha3-1_evts_n100/width_ph_eb.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawE_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawE_ph_ee.png new file mode 100644 index 0000000..2bc4c45 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawE_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawElog_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawElog_ph_ee.png new file mode 100644 index 0000000..22241cf Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawElog_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawElog_ph_ee.root b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawElog_ph_ee.root new file mode 100644 index 0000000..9c1c5ac Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/RawElog_ph_ee.root differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/corrected_energy_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/corrected_energy_ph_ee.png new file mode 100644 index 0000000..f029766 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/corrected_energy_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/corrected_energy_ph_ee.root b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/corrected_energy_ph_ee.root new file mode 100644 index 0000000..39462e0 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/corrected_energy_ph_ee.root differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/eta_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/eta_ph_ee.png new file mode 100644 index 0000000..4483860 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/eta_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/fres.root b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/fres.root new file mode 100644 index 0000000..19058e1 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/fres.root differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/mean_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/mean_ph_ee.png new file mode 100644 index 0000000..7d17e53 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/mean_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/n1_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/n1_ph_ee.png new file mode 100644 index 0000000..6728e72 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/n1_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/n2_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/n2_ph_ee.png new file mode 100644 index 0000000..9370919 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/n2_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/response_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/response_ph_ee.png new file mode 100644 index 0000000..ed60220 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/response_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/responselog_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/responselog_ph_ee.png new file mode 100644 index 0000000..5f449e0 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/responselog_ph_ee.png differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/responselog_ph_ee.root b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/responselog_ph_ee.root new file mode 100644 index 0000000..77a0ac3 Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/responselog_ph_ee.root differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/wereg_ph_ee.root b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/wereg_ph_ee.root new file mode 100644 index 0000000..023566e Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/wereg_ph_ee.root differ diff --git a/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/width_ph_ee.png b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/width_ph_ee.png new file mode 100644 index 0000000..df8796e Binary files /dev/null and b/macros/examples/Endcap_Log_sig3_alpha2-2_evts15/width_ph_ee.png differ diff --git a/macros/examples/HighPt_distribution_barrel_trainingSelection_notSaturated.png b/macros/examples/HighPt_distribution_barrel_trainingSelection_notSaturated.png new file mode 100644 index 0000000..835b7f0 Binary files /dev/null and b/macros/examples/HighPt_distribution_barrel_trainingSelection_notSaturated.png differ diff --git a/macros/examples/HighPt_distribution_endcap_trainingSelection_notSaturated.png b/macros/examples/HighPt_distribution_endcap_trainingSelection_notSaturated.png new file mode 100644 index 0000000..aad43af Binary files /dev/null and b/macros/examples/HighPt_distribution_endcap_trainingSelection_notSaturated.png differ diff --git a/macros/examples/Pt_distribution_barrel_trainingSelection_notSaturated.png b/macros/examples/Pt_distribution_barrel_trainingSelection_notSaturated.png new file mode 100644 index 0000000..49f091b Binary files /dev/null and b/macros/examples/Pt_distribution_barrel_trainingSelection_notSaturated.png differ diff --git a/macros/examples/Pt_distribution_endcap_trainingSelection_notSaturated.png b/macros/examples/Pt_distribution_endcap_trainingSelection_notSaturated.png new file mode 100644 index 0000000..24a53ca Binary files /dev/null and b/macros/examples/Pt_distribution_endcap_trainingSelection_notSaturated.png differ diff --git a/macros/examples/eregtesting.C b/macros/examples/eregtesting.C new file mode 100644 index 0000000..c936807 --- /dev/null +++ b/macros/examples/eregtesting.C @@ -0,0 +1,944 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "TH2.h" +#include "TProfile.h" + +using namespace RooFit; + +//effsigma function from Chris +Double_t effSigma(TH1 * hist) +{ + + TAxis *xaxis = hist->GetXaxis(); + Int_t nb = xaxis->GetNbins(); + if(nb < 10) + { + cout << "effsigma: Not a valid histo. nbins = " << nb << endl; + return 0.; + } + + Double_t bwid = xaxis->GetBinWidth(1); + if(bwid == 0) + { + cout << "effsigma: Not a valid histo. bwid = " << bwid << endl; + return 0.; + } + Double_t xmax = xaxis->GetXmax(); + Double_t xmin = xaxis->GetXmin(); + Double_t ave = hist->GetMean(); + Double_t rms = hist->GetRMS(); + + Double_t total=0.; + for(Int_t i=0; iGetBinContent(i); + } +// if(total < 100.) { +// cout << "effsigma: Too few entries " << total << endl; +// return 0.; +// } + Int_t ierr=0; + Int_t ismin=999; + + Double_t rlim=0.683*total; + Int_t nrms=rms/(bwid); // Set scan size to +/- rms + if(nrms > nb/10) nrms=nb/10; // Could be tuned... + + Double_t widmin=9999999.; + for(Int_t iscan=-nrms;iscanGetBinContent(ibm); + total=bin; + for(Int_t j=1;jGetBinContent(jbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + if(kbm > 0) + { + kbm--; + xk-=bwid; + bin=hist->GetBinContent(kbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + } + Double_t dxf=(total-rlim)*bwid/bin; + Double_t wid=(xj-xk+bwid-dxf)*0.5; + if(wid < widmin) + { + widmin=wid; + ismin=iscan; + } + } + if(ismin == nrms || ismin == -nrms) ierr=3; + if(ierr != 0) cout << "effsigma: Error of type " << ierr << endl; + + return widmin; + +} + +void eregtesting(bool dobarrel=true, bool doele=false) { + + //output dir + TString dirname = "ereg_sig3_EvenOddEvts_alpha2-3/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + /*TCut prescale10alt = "(event%10==1)"; + TCut prescale20alt = "(event%20==1)"; + TCut oddevents = "(event%2==1)"; + TCut prescale100alt = "(event%100==1)"; + TCut prescale1000alt = "(event%1000==1)"; + TCut prescale50alt = "(event%50==1)";*/ + TCut cutUsed = "(event%2==1)"; + Double_t mintgtvar = 0.6, nBins1 = 100, nBins2=250,nBins3 =800; + //read workspace from training + TString fname; + TString add1, addroot; //extension of png files - first part + if (doele && dobarrel) + { + fname = "wereg_ele_eb.root"; + add1 = "_ele_eb.png"; + } + else if (doele && !dobarrel) + { + fname = "wereg_ele_ee.root"; + add1 = "_ele_ee.png"; + } + else if (!doele && dobarrel) + { + fname = "wereg_ph_eb.root"; + add1 = "_ph_eb.png"; + addroot = "_ph_eb.root"; + } + else if (!doele && !dobarrel) + { + fname = "wereg_ph_ee.root"; + add1 = "_ph_ee.png"; + addroot = "_ph_ee.root"; + } + addroot = ""+addroot; + add1 = ""+add1; + TString add2(add1); //extension of png files - second part + + //Workspace + TString infile = TString::Format("./%s",fname.Data()); + TFile *fws = TFile::Open(infile); + RooWorkspace *ws = (RooWorkspace*)fws->Get("wereg"); + + //read variables from workspace + RooGBRTargetFlex *meantgt = static_cast(ws->arg("sigmeant")); + RooRealVar *tgtvar = ws->var("tgtvar"); + + + RooArgList vars; + vars.add(meantgt->FuncVars()); + vars.add(*tgtvar); + + //read testing dataset from TTree + RooRealVar weightvar("weightvar","",1.); + + TTree *dtree; + + if (doele) { + TFile *fdin = TFile::Open(""); + TDirectory *ddir = (TDirectory*)fdin->FindObjectAny(""); + dtree = (TTree*)ddir->Get(""); + } + else { + TFile *fTree = TFile::Open("/afs/cern.ch/user/m/musella/public/forKenza/gam_gam_phys14_v5_regtraining_v3.root"); + dtree = (TTree*)fTree->Get("promptTree"); + } + + //selection cuts for testing + TCut selcut; + if (dobarrel) + selcut = "pt>250. && abs(scEta)<=1.5 && kSaturated[12]!=1"; + else + selcut = "pt>250. && abs(scEta)>1.5 && kSaturated[12]!=1"; + + TCut selweight = "(1)"; + TCut prescale10alt = "(event%10==1)"; + TCut prescale20alt = "(event%20==1)"; + TCut prescale25 = "(event%25==0)"; + TCut oddevents = "(event%2==1)"; + TCut prescale100alt = "(event%100==1)"; + TCut prescale1000alt = "(event%1000==1)"; + TCut prescale50alt = "(event%50==1)"; + + if (doele) + weightvar.SetTitle(prescale100alt*selcut); + else + weightvar.SetTitle(cutUsed*selcut); + + //make testing dataset + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",dtree,vars,weightvar); + + + +/* //CreateDataSet hdatasmall + if (doele) + weightvar.SetTitle(prescale1000alt*selcut); + else + weightvar.SetTitle(cutUsed*selcut); + //make reduced testing dataset for integration over conditional variables + RooDataSet *hdatasmall = RooTreeConvert::CreateDataSet("hdatasmall",dtree,vars,weightvar); +*/ + //retrieve full pdf from workspace + RooAbsPdf *sigpdf = ws->pdf("sigpdf"); + + //input variable corresponding to sceta + RooRealVar *scetavar = ws->var("var_1"); + + //R9 + RooRealVar *r9 = ws->var("var_3"); + + //regressed output functions + RooAbsReal *sigmeanlim = ws->function("sigmeanlim"); + RooAbsReal *sigwidthlim = ws->function("sigwidthlim"); + RooAbsReal *sign1lim = ws->function("sign1lim"); + RooAbsReal *sign2lim = ws->function("sign2lim"); + + //formula for corrected energy/true energy ( 1.0/(etrue/eraw) * regression mean) + RooFormulaVar ecor("ecor","","1./(@0)*@1",RooArgList(*tgtvar,*sigmeanlim)); + RooRealVar *ecorvar = (RooRealVar*)hdata->addColumn(ecor); + ecorvar->setRange(0.,2.); + ecorvar->setBins(800); + + //formula for raw energy/true energy (1.0/(etrue/eraw)) + RooFormulaVar raw("raw","","1./@0",RooArgList(*tgtvar)); + RooRealVar *rawvar = (RooRealVar*)hdata->addColumn(raw); + rawvar->setRange(0.,2.); + rawvar->setBins(800); + + //clone data and add regression outputs for plotting + RooDataSet *hdataclone = new RooDataSet(*hdata,"hdataclone"); + RooRealVar *meanvar = (RooRealVar*)hdataclone->addColumn(*sigmeanlim); + RooRealVar *widthvar = (RooRealVar*)hdataclone->addColumn(*sigwidthlim); + RooRealVar *n1var = (RooRealVar*)hdataclone->addColumn(*sign1lim); + RooRealVar *n2var = (RooRealVar*)hdataclone->addColumn(*sign2lim); + + + //plot target variable and weighted regression prediction (using numerical integration over reduced testing dataset) +/*TCanvas *craw = new TCanvas("craw","craw"); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(0.6,1.2,100); + RooPlot *plot = tgtvar->frame(mintgtvar,2., nBins1); + plot->SetTitle("Distribution of generated_energy/raw_energy"); + plot->GetXaxis()->SetTitle("generated_enery / raw_energy"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF")); + plot->Draw(); + TLegend *legend = new TLegend(0.6,0.6,0.9,0.9); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("MC_sample","MC Sample","P"); + legend->AddEntry("Signal_PDF","Signal PDF","l"); + legend->Draw(); + + craw->SaveAs("RawE"+add1); + craw->SetLogy(); + plot->SetMinimum(0.1); + craw->SaveAs("RawElog"+add1); + craw->SaveAs("RawElog"+addroot); + + TCanvas *craw2 = new TCanvas("craw2","craw2"); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(0.6,1.2,100); + plot = tgtvar->frame(mintgtvar,2., nBins2); + plot->SetTitle("Distribution of generated_energy/raw_energy"); + plot->GetXaxis()->SetTitle("generated_enery / raw_energy"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample2")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF2")); + plot->Draw(); + TLegend *legend2 = new TLegend(0.6,0.6,0.9,0.9); + legend2->SetFillColor(kWhite); + legend2->SetLineColor(kWhite); + legend2->AddEntry("MC_sample2","MC Sample","P"); + legend2->AddEntry("Signal_PDF2","Signal PDF","l"); + legend2->Draw(); + + craw2->SaveAs("RawE2"+add1); + craw2->SetLogy(); + plot->SetMinimum(0.1); + craw2->SaveAs("RawElog2"+add1); + craw2->SaveAs("RawElog2"+addroot); + + TCanvas *craw3 = new TCanvas("craw3","craw3"); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(0.6,1.2,100); + plot = tgtvar->frame(mintgtvar,2., nBins3); + plot->SetTitle("Distribution of generated_energy/raw_energy"); + plot->GetXaxis()->SetTitle("generated_enery / raw_energy"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample3")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF3")); + plot->Draw(); + TLegend *legend3 = new TLegend(0.6,0.6,0.9,0.9); + legend3->SetFillColor(kWhite); + legend3->SetLineColor(kWhite); + legend3->AddEntry("MC_sample3","MC Sample","P"); + legend3->AddEntry("Signal_PDF3","Signal PDF","l"); + legend3->Draw(); + + craw3->SaveAs("RawE3"+add1); + craw3->SetLogy(); + plot->SetMinimum(0.1); + craw3->SaveAs("RawElog3"+add1); + craw3->SaveAs("RawElog3"+addroot); + + + //plot distribution of regressed functions over testing dataset + TCanvas *cmean = new TCanvas("cmean","cmean"); //---------------------------------------------------------CANVAS + RooPlot *plotmean = meanvar->frame(0.8,2.0,100); + plotmean->SetTitle("Data events vs signal_mean"); + plotmean->GetXaxis()->SetTitle("signal_mean"); + hdataclone->plotOn(plotmean); + plotmean->Draw(); + cmean->SaveAs("mean"+add1); + + TCanvas *cwidth = new TCanvas("cwidth","cwidth"); //------------------------------------------------------CANVAS + //RooPlot *plotwidth = widthvar->frame(Title("hdata vs width"),0.,0.05,100); + RooPlot *plotwidth = widthvar->frame(0.,0.05,100); + plotwidth->SetTitle("Data events vs signal_width"); + plotwidth->GetXaxis()->SetTitle("signal_width"); + hdataclone->plotOn(plotwidth); + plotwidth->Draw(); + cwidth->SaveAs("width"+add1); + + TCanvas *cn1 = new TCanvas("cn1","cn1"); //------------------------------------------------------------------CANVAS + //RooPlot *plotn1 = nvar->frame(Title("hdata vs nvar"),0.,111.,200); + //RooPlot *plotn1 = nvar->frame(0.,111.,200); + RooPlot *plotn1 = n1var->frame(0.,100,800); + plotn1->SetTitle("Data events vs n1_pow"); + plotn1->GetXaxis()->SetTitle("n1_pow"); + hdataclone->plotOn(plotn1); + plotn1->Draw(); + cn1->SaveAs("n1"+add1); + + TCanvas *cn2 = new TCanvas("cn2","cn2"); //---------------------------------------------------------------CANVAS + //RooPlot *plotn2 = n2var->frame(Title("hdata vs n2var"),0.,111.,100); + RooPlot *plotn2 = n2var->frame(0.,100.,400); + plotn2->SetTitle("Data events vs n2_pow"); + plotn2->GetXaxis()->SetTitle("n2_pow"); + hdataclone->plotOn(plotn2); + plotn2->Draw(); + cn2->SaveAs("n2"+add1); + + TCanvas *ceta = new TCanvas("ceta","ceta"); //------------------------------------------------------------CANVAS + RooPlot *ploteta = scetavar->frame(-2.6,2.6,200); + ploteta->SetTitle("Data events vs eta"); + ploteta->GetXaxis()->SetTitle("eta"); + hdataclone->plotOn(ploteta); + ploteta->Draw(); + ceta->SaveAs("eta"+add1); + + + //create histograms for eraw/etrue and ecor/etrue to quantify regression performance + TH1 *heraw = hdata->createHistogram("heraw",*rawvar,Binning(800,0.,2.)); + TH1 *hecor = hdata->createHistogram("hecor",*ecorvar); + + //heold->SetLineColor(kRed); + hecor->SetLineColor(kBlue); + heraw->SetLineColor(kMagenta); + + hecor->GetXaxis()->SetRangeUser(0.6,1.2); + //heold->GetXaxis()->SetRangeUser(0.6,1.2); + hecor->GetXaxis()->SetTitle("magenta: raw/true - blue: mean*raw/true"); + TCanvas *cresponse = new TCanvas("cresponse","cresponse"); //---------------------------------------------CANVAS + gPad->SetGridx(); + gPad->SetGridy(); + hecor->Draw("HIST"); + //heold->Draw("HISTSAME"); + heraw->Draw("HISTSAME"); + cresponse->SaveAs("response"+add1); + cresponse->SetLogy(); + cresponse->SaveAs("responselog"+add1); + //cresponse->SetLogy(kFALSE); + cresponse->SaveAs("responselog"+addroot); + + printf("make fine histogram\n"); + TH1 *hecorfine = hdata->createHistogram("hecorfine",*ecorvar,Binning(20e3,0.,2.)); + TH1 *hrawfine = hdata->createHistogram("hrawfine",*rawvar,Binning(20e3,0.,2.)); + printf("calc effsigma\n"); + + double effsigmaCor = effSigma(hecorfine); + double effsigmaRaw = effSigma(hrawfine); + printf("effsigmaCor = %5f - effsigmaRaw = %5f\n",effsigmaCor,effsigmaRaw);*/ + + //new TCanvas; + //RooPlot *ploteold = testvar.frame(0.6,1.2,100); + //hdatasigtest->plotOn(ploteold); + //ploteold->Draw(); + + //new TCanvas; + //RooPlot *plotecor = ecorvar->frame(0.6,1.2,100); + //hdatasig->plotOn(plotecor); + //plotecor->Draw(); + + //________________________________________________________________________________________________________________________ + //________________________________________________________________________________________________________________________ + //________________________________________________________________________________________________________________________ + // + RooRealVar *scphi = ws->var("var_2"); + //RooRealVar *r9 = ws->var("var_3"); + RooRealVar *scetawidth = ws->var("var_4"); + RooRealVar *scphiwidth = ws->var("var_5"); + RooRealVar *scnclusters = ws->var("var_6"); + RooRealVar *hoveretower = ws->var("var_7"); + RooRealVar *rho = ws->var("var_8"); + RooRealVar *nvtx = ws->var("var_9"); + RooRealVar *sigmean = (RooRealVar*)hdata->addColumn(*sigmeanlim); + + RooRealVar *pt; + RooRealVar *rawEnergy = ws->var("var_0"); + + if(!dobarrel) { + RooRealVar *preshowerEnergy = ws->var("var_28"); + //formula for Pt corrected_energy/Cosh(eta) = ecorvar*tgtvar*rawvar/cosh(eta) + RooFormulaVar ptFormula("pt","","@0*@1*(1+@2)*1./(cosh(@3))",RooArgList(*sigmeanlim,*rawEnergy,*preshowerEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(0.,2500); // + } + else { + RooFormulaVar ptFormula("pt","","@0*@1*1./(cosh(@2))",RooArgList(*sigmeanlim,*rawEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(0.,5000); // + } + + //Set ranges for variables + sigmean->setRange(0.,2.); + //------------------ + scetavar->setRange(-2.5,2.5); + scphi->setRange(-4.,4.); + r9->setRange(0.65,1.); + scetawidth->setRange(0.,0.025); + scphiwidth->setRange(0.,0.2); + scnclusters->setRange(0.,20.); + hoveretower->setRange(0.,0.2); + rho->setRange(0.,40.); + nvtx->setRange(0.,50.); + + //Set Binning + hoveretower->setBins(50.); + + //Define Canvas properties + Double_t canvas_width(1300); + Double_t canvas_height(800); + +//create canvas for ecor (corrected energy) + Double_t plotERMin(0.6), plotERMax(1.2); + Double_t plotECMin(0.9), plotECMax(1.1); + + TCanvas *canvas_ecor = new TCanvas("corrected_energy","ecor",canvas_width,canvas_height); + + canvas_ecor->Divide(2,2); + + //________________ + // ecor_sceta + //________________ + canvas_ecor->cd(1); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_sceta = hdata->createHistogram(*scetavar,*ecorvar); + TProfile *hprof_ecor_sceta = histo2_ecor_sceta->ProfileX(); + hprof_ecor_sceta->SetErrorOption("s"); + hprof_ecor_sceta->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_sceta->GetXaxis()->SetTitle("eta"); + hprof_ecor_sceta->GetYaxis()->SetTitle("ecor"); + hprof_ecor_sceta->Draw(); + + /*//________________ + // ecor_scphi + //________________ + //TCanvas *canvas_ecor_scphi = new TCanvas("ecor_scphi","ecor_scphi"); + canvas_ecor->cd(2); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_scphi = hdata->createHistogram(*scphi,*ecorvar); + TProfile *hprof_ecor_scphi = histo2_ecor_scphi->ProfileX(); + hprof_ecor_scphi->SetErrorOption("s"); + hprof_ecor_scphi->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_scphi->GetXaxis()->SetTitle("phi"); + hprof_ecor_scphi->GetYaxis()->SetTitle("ecor"); + hprof_ecor_scphi->Draw(); + //canvas_ecor_scphi->SaveAs("ecor_scphi.png");*/ + + //________________ + // ecor_r9 + //________________ + //TCanvas *canvas_ecor_r9 = new TCanvas("ecor_r9","ecor_r9"); + canvas_ecor->cd(2); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_r9 = hdata->createHistogram(*r9,*ecorvar); + TProfile *hprof_ecor_r9 = histo2_ecor_r9->ProfileX(); + hprof_ecor_r9->SetErrorOption("s"); + hprof_ecor_r9->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_r9->GetXaxis()->SetTitle("R9"); + hprof_ecor_r9->GetYaxis()->SetTitle("ecor"); + hprof_ecor_r9->Draw(); + //canvas_ecor_r9->SaveAs("ecor_r9.png"); + +/* //________________ + // ecor_scetawidth + //________________ + //TCanvas *canvas_ecor_scetawidth = new TCanvas("ecor_scetawidth","ecor_scetawidth"); + canvas_ecor->cd(4); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_scetawidth = hdata->createHistogram(*scetawidth,*ecorvar); + TProfile *hprof_ecor_scetawidth = histo2_ecor_scetawidth->ProfileX(); + hprof_ecor_scetawidth->SetErrorOption("s"); + hprof_ecor_scetawidth->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_scetawidth->GetXaxis()->SetTitle("scetawidth"); + hprof_ecor_scetawidth->GetYaxis()->SetTitle("ecor"); + hprof_ecor_scetawidth->Draw(); + //canvas_ecor_scetawidth->SaveAs("ecor_scetawidth.png"); + + //________________ + // ecor_scphiwidth + //________________ + //TCanvas *canvas_ecor_scphiwidth = new TCanvas("ecor_scphiwidth","ecor_scphiwidth"); + canvas_ecor->cd(5); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_scphiwidth = hdata->createHistogram(*scphiwidth,*ecorvar); + TProfile *hprof_ecor_scphiwidth = histo2_ecor_scphiwidth->ProfileX(); + hprof_ecor_scphiwidth->SetErrorOption("s"); + hprof_ecor_scphiwidth->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_scphiwidth->GetXaxis()->SetTitle("scphiwidth"); + hprof_ecor_scphiwidth->GetYaxis()->SetTitle("ecor"); + hprof_ecor_scphiwidth->Draw(); + //canvas_ecor_scphiwidth->SaveAs("ecor_scphiwidth.png"); +*/ + //________________ + // ecor_Pt + //________________ + //TCanvas *canvas_ecor_pt = new TCanvas("ecor_pt","ecor_pt"); + canvas_ecor->cd(3); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_pt = hdata->createHistogram(*pt,*ecorvar); + TProfile *hprof_ecor_pt = histo2_ecor_pt->ProfileX(); + hprof_ecor_pt->SetErrorOption("s"); + hprof_ecor_pt->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_pt->GetXaxis()->SetTitle("pt"); + hprof_ecor_pt->GetYaxis()->SetTitle("ecor"); + hprof_ecor_pt->Draw(); + //canvas_ecor_pt->SaveAs("ecor_pt.png"); + +/* //________________ + // ecor_hoveretower + //________________ + //TCanvas *canvas_ecor_hoveretower = new TCanvas("ecor_hoveretower","ecor_hoveretower"); + canvas_ecor->cd(7); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_hoveretower = hdata->createHistogram(*hoveretower,*ecorvar); + TProfile *hprof_ecor_hoveretower = histo2_ecor_hoveretower->ProfileX(); + hprof_ecor_hoveretower->SetMarkerColor(kRed); + hprof_ecor_hoveretower->SetMarkerStyle(7); + hprof_ecor_hoveretower->SetErrorOption("s"); + hprof_ecor_hoveretower->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_hoveretower->GetXaxis()->SetTitle("hoveretower"); + hprof_ecor_hoveretower->GetYaxis()->SetTitle("ecor"); + hprof_ecor_hoveretower->Draw(); + //canvas_ecor_hoveretower->SaveAs("ecor_hovertower.png"); + +*/ + //________________ + // ecor_rho + //________________ + //TCanvas *canvas_ecor_rho = new TCanvas("ecor_rho","ecor_rho"); + canvas_ecor->cd(4); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_rho = hdata->createHistogram(*rho,*ecorvar); + TProfile *hprof_ecor_rho = histo2_ecor_rho->ProfileX(); + hprof_ecor_rho->SetErrorOption("s"); + hprof_ecor_rho->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_rho->GetXaxis()->SetTitle("rho"); + hprof_ecor_rho->GetYaxis()->SetTitle("ecor"); + hprof_ecor_rho->Draw(); + +/* //________________ + // ecor_nvtx + //________________ + //TCanvas *canvas_ecor_nvtx = new TCanvas("ecor_nvtx","ecor_nvtx"); + canvas_ecor->cd(9); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_ecor_nvtx = hdata->createHistogram(*nvtx,*ecorvar); + TProfile *hprof_ecor_nvtx = histo2_ecor_nvtx->ProfileX(); + hprof_ecor_nvtx->SetErrorOption("s"); + hprof_ecor_nvtx->GetYaxis()->SetRangeUser(plotECMin,plotECMax); + hprof_ecor_nvtx->GetXaxis()->SetTitle("nvtx"); + hprof_ecor_nvtx->GetYaxis()->SetTitle("ecor"); + hprof_ecor_nvtx->Draw();*/ + +//save canvas_ecor + canvas_ecor->SaveAs("corrected_energy"+add2); + canvas_ecor->SaveAs("corrected_energy"+addroot); + + +//create canvas for rawvar (raw energy) + TCanvas *canvas_rawvar = new TCanvas("raw_energy","rawvar",canvas_width,canvas_height); + canvas_rawvar->Divide(2,2); + + //________________ + // rawvar_sceta + //________________ + canvas_rawvar->cd(1); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_sceta = hdata->createHistogram(*scetavar,*rawvar); + TProfile *hprof_rawvar_sceta = histo2_rawvar_sceta->ProfileX(); + hprof_rawvar_sceta->SetErrorOption("s"); + hprof_rawvar_sceta->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_sceta->GetXaxis()->SetTitle("eta"); + hprof_rawvar_sceta->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_sceta->Draw(); + //canvas_rawvar_sceta->SaveAs("rawvar_sceta.png"); + +/* //________________ + // rawvar_scphi + //________________ + //TCanvas *canvas_rawvar_scphi = new TCanvas("rawvar_scphi","rawvar_scphi"); + canvas_rawvar->cd(2); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_scphi = hdata->createHistogram(*scphi,*rawvar); + TProfile *hprof_rawvar_scphi = histo2_rawvar_scphi->ProfileX(); + hprof_rawvar_scphi->SetErrorOption("s"); + hprof_rawvar_scphi->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_scphi->GetXaxis()->SetTitle("phi"); + hprof_rawvar_scphi->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_scphi->Draw(); + //canvas_rawvar_scphi->SaveAs("rawvar_scphi.png"); + + */ + //________________ + // rawvar_r9 + //________________ + //TCanvas *canvas_rawvar_r9 = new TCanvas("rawvar_r9","rawvar_r9"); + canvas_rawvar->cd(2); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_r9 = hdata->createHistogram(*r9,*rawvar); + TProfile *hprof_rawvar_r9 = histo2_rawvar_r9->ProfileX(); + hprof_rawvar_r9->SetErrorOption("s"); + hprof_rawvar_r9->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_r9->GetXaxis()->SetTitle("R9"); + hprof_rawvar_r9->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_r9->Draw(); + //canvas_rawvar_r9->SaveAs("rawvar_r9.png"); +/* + //________________ + // rawvar_scetawidth + //________________ + //TCanvas *canvas_rawvar_scetawidth = new TCanvas("rawvar_scetawidth","rawvar_scetawidth"); + canvas_rawvar->cd(4); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_scetawidth = hdata->createHistogram(*scetawidth,*rawvar); + TProfile *hprof_rawvar_scetawidth = histo2_rawvar_scetawidth->ProfileX(); + hprof_rawvar_scetawidth->SetErrorOption("s"); + hprof_rawvar_scetawidth->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_scetawidth->GetXaxis()->SetTitle("scetawidth"); + hprof_rawvar_scetawidth->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_scetawidth->Draw(); + //canvas_rawvar_scetawidth->SaveAs("rawvar_scetawidth.png"); + + //________________ + // rawvar_scphiwidth + //________________ + //TCanvas *canvas_rawvar_scphiwidth = new TCanvas("rawvar_scphiwidth","rawvar_scphiwidth"); + canvas_rawvar->cd(5); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_scphiwidth = hdata->createHistogram(*scphiwidth,*rawvar); + TProfile *hprof_rawvar_scphiwidth = histo2_rawvar_scphiwidth->ProfileX(); + hprof_rawvar_scphiwidth->SetErrorOption("s"); + hprof_rawvar_scphiwidth->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_scphiwidth->GetXaxis()->SetTitle("scphiwidth"); + hprof_rawvar_scphiwidth->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_scphiwidth->Draw(); + //canvas_rawvar_scphiwidth->SaveAs("rawvar_scphiwidth.png"); + +*/ //________________ + // rawvar_pt + //________________ + //TCanvas *canvas_rawvar_pt = new TCanvas("rawvar_pt","rawvar_pt"); + canvas_rawvar->cd(3); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_pt = hdata->createHistogram(*pt,*rawvar); + TProfile *hprof_rawvar_pt = histo2_rawvar_pt->ProfileX(); + hprof_rawvar_pt->SetErrorOption("s"); + hprof_rawvar_pt->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_pt->GetXaxis()->SetTitle("pt"); + hprof_rawvar_pt->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_pt->Draw(); + //canvas_rawvar_pt->SaveAs("rawvar_pt.png"); + +/* //________________ + // rawvar_hoveretower + //________________ + //TCanvas *canvas_rawvar_hoveretower = new TCanvas("rawvar_hoveretower","rawvar_hoveretower"); + canvas_rawvar->cd(7); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_hoveretower = hdata->createHistogram(*hoveretower,*rawvar); + TProfile *hprof_rawvar_hoveretower = histo2_rawvar_hoveretower->ProfileX(); + hprof_rawvar_hoveretower->SetErrorOption("s"); + hprof_rawvar_hoveretower->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_hoveretower->GetXaxis()->SetTitle("hoveretower"); + hprof_rawvar_hoveretower->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_hoveretower->Draw(); + //canvas_rawvar_hoveretower->SaveAs("rawvar_hoveretower.png"); +*/ + //________________ + // rawvar_rho + //________________ + //TCanvas *canvas_rawvar_rho = new TCanvas("rawvar_rho","rawvar_rho"); + canvas_rawvar->cd(4); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_rho = hdata->createHistogram(*rho,*rawvar); + TProfile *hprof_rawvar_rho = histo2_rawvar_rho->ProfileX(); + hprof_rawvar_rho->SetErrorOption("s"); + hprof_rawvar_rho->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_rho->GetXaxis()->SetTitle("rho"); + hprof_rawvar_rho->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_rho->Draw(); + +/* //________________ + // rawvar_nvtx + //________________ + //TCanvas *canvas_rawvar_nvtx = new TCanvas("rawvar_nvtx","rawvar_nvtx"); + canvas_rawvar->cd(9); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_rawvar_nvtx = hdata->createHistogram(*nvtx,*rawvar); + TProfile *hprof_rawvar_nvtx = histo2_rawvar_nvtx->ProfileX(); + hprof_rawvar_nvtx->SetErrorOption("s"); + hprof_rawvar_nvtx->GetYaxis()->SetRangeUser(plotERMin,plotERMax); + hprof_rawvar_nvtx->GetXaxis()->SetTitle("nvtx"); + hprof_rawvar_nvtx->GetYaxis()->SetTitle("rawvar"); + hprof_rawvar_nvtx->Draw(); +*/ + +//save canvas_rawvar + canvas_rawvar->SaveAs("raw_energy"+add2); + canvas_rawvar->SaveAs("raw_energy"+addroot); + +//create canvas for mean (#mu) +/* Double_t maxMu(1.5), minMu(0.8); + + TCanvas *canvas_sigmean = new TCanvas("signal_mean","sigmean",canvas_width,canvas_height); + gPad->SetGridx(); + gPad->SetGridy(); + canvas_sigmean->Divide(3,3); + //________________ + // sigmean_sceta + //________________ + canvas_sigmean->cd(1); + gPad->SetGridx(); + gPad->SetGridy(); + + TH2* histo2_sigmean_sceta = hdata->createHistogram(*scetavar,*sigmean); + TProfile *hprof_sigmean_sceta = histo2_sigmean_sceta->ProfileX(); + hprof_sigmean_sceta->SetErrorOption("s"); + hprof_sigmean_sceta->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_sceta->GetXaxis()->SetTitle("eta"); + hprof_sigmean_sceta->GetYaxis()->SetTitle("mu"); + hprof_sigmean_sceta->Draw(); + //canvas_sigmean_sceta->SaveAs("sigmean_sceta.png"); + + //________________ + // sigmean_scphi + //________________ + //TCanvas *canvas_sigmean_scphi = new TCanvas("sigmean_scphi","sigmean_scphi"); + canvas_sigmean->cd(2); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_sigmean_scphi = hdata->createHistogram(*scphi,*sigmean); + TProfile *hprof_sigmean_scphi = histo2_sigmean_scphi->ProfileX(); + hprof_sigmean_scphi->SetErrorOption("s"); + hprof_sigmean_scphi->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_scphi->GetXaxis()->SetTitle("phi"); + hprof_sigmean_scphi->GetYaxis()->SetTitle("mu"); + hprof_sigmean_scphi->Draw(); + //canvas_sigmean_scphi->SaveAs("sigmean_scphi.png"); + + + //________________ + // sigmean_r9 + //________________ + //TCanvas *canvas_sigmean_r9 = new TCanvas("sigmean_r9","sigmean_r9"); + canvas_sigmean->cd(3); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_sigmean_r9 = hdata->createHistogram(*r9,*sigmean); + TProfile *hprof_sigmean_r9 = histo2_sigmean_r9->ProfileX(); + hprof_sigmean_r9->SetErrorOption("s"); + hprof_sigmean_r9->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_r9->GetXaxis()->SetTitle("R9"); + hprof_sigmean_r9->GetYaxis()->SetTitle("mu"); + hprof_sigmean_r9->Draw(); + //canvas_sigmean_r9->SaveAs("sigmean_r9.png"); + + //________________ + // sigmean_scetawidth + //________________ + //TCanvas *canvas_sigmean_scetawidth = new TCanvas("sigmean_scetawidth","sigmean_scetawidth"); + canvas_sigmean->cd(4); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_sigmean_scetawidth = hdata->createHistogram(*scetawidth,*sigmean); + TProfile *hprof_sigmean_scetawidth = histo2_sigmean_scetawidth->ProfileX(); + hprof_sigmean_scetawidth->SetErrorOption("s"); + hprof_sigmean_scetawidth->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_scetawidth->GetXaxis()->SetTitle("scetawidth"); + hprof_sigmean_scetawidth->GetYaxis()->SetTitle("mu"); + hprof_sigmean_scetawidth->Draw(); + //canvas_sigmean_scetawidth->SaveAs("sigmean_scetawidth.png"); + + //________________ + // sigmean_scphiwidth + //________________ + //TCanvas *canvas_sigmean_scphiwidth = new TCanvas("sigmean_scphiwidth","sigmean_scphiwidth"); + canvas_sigmean->cd(5); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_sigmean_scphiwidth = hdata->createHistogram(*scphiwidth,*sigmean); + TProfile *hprof_sigmean_scphiwidth = histo2_sigmean_scphiwidth->ProfileX(); + hprof_sigmean_scphiwidth->SetErrorOption("s"); + hprof_sigmean_scphiwidth->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_scphiwidth->GetXaxis()->SetTitle("scphiwidth"); + hprof_sigmean_scphiwidth->GetYaxis()->SetTitle("mu"); + hprof_sigmean_scphiwidth->Draw(); + //canvas_sigmean_scphiwidth->SaveAs("sigmean_scphiwidth.png"); + + //________________ + // sigmean_pt + //________________ + //TCanvas *canvas_sigmean_pt = new TCanvas("sigmean_pt","sigmean_pt"); + canvas_sigmean->cd(6); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_sigmean_pt = hdata->createHistogram(*pt,*sigmean); + TProfile *hprof_sigmean_pt = histo2_sigmean_pt->ProfileX(); + hprof_sigmean_pt->SetErrorOption("s"); + hprof_sigmean_pt->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_pt->GetXaxis()->SetTitle("pt"); + hprof_sigmean_pt->GetYaxis()->SetTitle("mu"); + hprof_sigmean_pt->Draw(); + //canvas_sigmean_pt->SaveAs("sigmean_pt.png"); + + //________________ + // sigmean_hoveretower + //________________ + //TCanvas *canvas_sigmean_hoveretower = new TCanvas("sigmean_hoveretower","sigmean_hoveretower"); + canvas_sigmean->cd(7); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_sigmean_hoveretower = hdata->createHistogram(*hoveretower,*sigmean); + TProfile *hprof_sigmean_hoveretower = histo2_sigmean_hoveretower->ProfileX(); + hprof_sigmean_hoveretower->SetErrorOption("s"); + hprof_sigmean_hoveretower->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_hoveretower->GetXaxis()->SetTitle("hoveretower"); + hprof_sigmean_hoveretower->GetYaxis()->SetTitle("mu"); + hprof_sigmean_hoveretower->Draw(); + //canvas_sigmean_hoveretower->SaveAs("sigmean_hoveretower.png"); + + //________________ + // sigmean_rho + //________________ + //TCanvas *canvas_sigmean_rho = new TCanvas("sigmean_rho","sigmean_rho"); + canvas_sigmean->cd(8); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_sigmean_rho = hdata->createHistogram(*rho,*sigmean); + TProfile *hprof_sigmean_rho = histo2_sigmean_rho->ProfileX(); + hprof_sigmean_rho->SetErrorOption("s"); + hprof_sigmean_rho->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_rho->GetXaxis()->SetTitle("rho"); + hprof_sigmean_rho->GetYaxis()->SetTitle("mu"); + hprof_sigmean_rho->Draw(); + + //________________ + // sigmean_nvtx + //________________ + //TCanvas *canvas_sigmean_nvtx = new TCanvas("sigmean_nvtx","sigmean_nvtx"); + canvas_sigmean->cd(9); + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2_sigmean_nvtx = hdata->createHistogram(*nvtx,*sigmean); + TProfile *hprof_sigmean_nvtx = histo2_sigmean_nvtx->ProfileX(); + hprof_sigmean_nvtx->SetErrorOption("s"); + hprof_sigmean_nvtx->GetYaxis()->SetRangeUser(minMu,maxMu); + hprof_sigmean_nvtx->GetXaxis()->SetTitle("nvtx"); + hprof_sigmean_nvtx->GetYaxis()->SetTitle("mu"); + hprof_sigmean_nvtx->Draw(); + +//save canvas_sigmean + canvas_sigmean->SaveAs("signal_mean"+add2); + canvas_sigmean->SaveAs("signal_mean"+addroot);*/ +} diff --git a/macros/examples/eregtestingFAlpha_Log.C b/macros/examples/eregtestingFAlpha_Log.C new file mode 100644 index 0000000..45a769c --- /dev/null +++ b/macros/examples/eregtestingFAlpha_Log.C @@ -0,0 +1,716 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "TH2.h" +#include "TProfile.h" +#include "TF1.h" +#include "TStyle.h" + +using namespace RooFit; + +//effsigma function from Chris +Double_t effSigma(TH1 * hist); + +void plot_Profile(RooDataSet *hdata, bool dobarrel, RooRealVar *xvar,RooRealVar *ecorvar, RooRealVar *rawvar,TString xLabel, TString yLabel,Double_t plotEMin, Double_t plotEMax,Double_t plotXMin_barrel, Double_t plotXMax_barrel); + +void plot_Slices(RooDataSet* hdata,bool dobarrel,TObjArray *Arr,RooRealVar *xvar,RooRealVar *ecorvar, RooRealVar *rawvar,TString name_of_hist_mean,TString name_of_hist_chi2, TString xLabel, TString yLabel,Double_t plotEMin, Double_t plotEMax,Double_t plotXMin, Double_t plotXMax, Double_t plotXMin_endcap=0, Double_t plotXMax_endcap=0); + +void plot_Mean(RooDataSet* hdata,bool dobarrel,RooRealVar *xvar,RooRealVar *sigmean, TString xLabel, TString yLabel,Double_t plotMeanMin, Double_t plotMeanMax,Double_t plotXMin_barrel, Double_t plotXMax_barrel); + +void eregtestingFAlpha_Log(bool dobarrel=true, bool doele=false) { + + //output dir + TString dirname = "Barrel_Log_sig3_FAlpha__evts15/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + TCut cutUsed = "(event%15==1)"; + Double_t nmax=500.,nbinsn=500; + Double_t mintgtvar = -0.5, nBins1 = 500, nBins2=250,nBins3 =800; + //read workspace from training + TString fname; + TString add1, addroot; //extension of png files - first part + if (doele && dobarrel) + { + fname = "wereg_ele_eb.root"; + add1 = "_ele_eb.png"; + } + else if (doele && !dobarrel) + { + fname = "wereg_ele_ee.root"; + add1 = "_ele_ee.png"; + } + else if (!doele && dobarrel) + { + fname = "wereg_ph_eb.root"; + add1 = "_ph_eb.png"; + addroot = "_ph_eb.root"; + } + else if (!doele && !dobarrel) + { + fname = "wereg_ph_ee.root"; + add1 = "_ph_ee.png"; + addroot = "_ph_ee.root"; + } + addroot = ""+addroot; + add1 = ""+add1; + TString add2(add1); //extension of png files - second part + + //Workspace + TString infile = TString::Format("./%s",fname.Data()); + TFile *fws = TFile::Open(infile); + RooWorkspace *ws = (RooWorkspace*)fws->Get("wereg"); + + //read variables from workspace + RooGBRTargetFlex *meantgt = static_cast(ws->arg("sigmeant")); + RooRealVar *tgtvar = ws->var("tgtvar"); + + RooArgList vars; + vars.add(meantgt->FuncVars()); + vars.add(*tgtvar); + + //read testing dataset from TTree + RooRealVar weightvar("weightvar","",1.); + + + TChain *tree; + + //if (doele) + //{ + //tree = new TChain(""); + //tree->Add(""); + //} + // else + //{ + tree = new TChain("promptTree"); + tree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-300To3000.root"); + tree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-5To300_lessstat.root"); + + //} + + //training selection cut + TCut selcut; + if (dobarrel) + { + selcut = "etrue*pt/energy >=200. && etrue*pt/energy<=3000 && abs(scEta)<1.5 && kSaturated[12]!=1 "; + } + else + { + selcut = "etrue*pt/energy >=200. && etrue*pt/energy<=3000 && abs(scEta)>1.5 && kSaturated[12]!=1 " ; + } + + + TCut selweight = "(1)"; + TCut prescale10alt = "(event%10==1)"; + TCut prescale20alt = "(event%20==1)"; + TCut prescale25 = "(event%25==0)"; + TCut oddevents = "(event%2==1)"; + TCut prescale100alt = "(event%100==1)"; + TCut prescale1000alt = "(event%1000==1)"; + TCut prescale50alt = "(event%50==1)"; + + if (doele) + weightvar.SetTitle(prescale100alt*selcut); + else + weightvar.SetTitle(cutUsed*selweight*selcut); + + //make testing dataset + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",tree,vars,weightvar); + + //retrieve full pdf from workspace + RooAbsPdf *sigpdf = ws->pdf("sigpdf"); + + //input variable corresponding to sceta + RooRealVar *scetavar = ws->var("var_1"); + + //R9 + RooRealVar *r9 = ws->var("var_3"); + + //regressed output functions + RooAbsReal *sigmeanlim = ws->function("sigmeanlim"); + RooAbsReal *sigwidthlim = ws->function("sigwidthlim"); + RooAbsReal *siga1lim = ws->function("siga1lim"); + RooAbsReal *siga2lim = ws->function("siga2lim"); + RooAbsReal *sign1lim = ws->function("sign1lim"); + RooAbsReal *sign2lim = ws->function("sign2lim"); + + //formula for corrected energy/true energy ( 1.0/(etrue/eraw) * regression mean) + RooFormulaVar ecor("ecor","","1./(exp(@0))*exp(@1)",RooArgList(*tgtvar,*sigmeanlim)); + RooRealVar *ecorvar = (RooRealVar*)hdata->addColumn(ecor); + ecorvar->setRange(0.,2.); + ecorvar->setBins(800); + + //formula for raw energy/true energy (1.0/(etrue/eraw)) + RooFormulaVar raw("raw","","1./exp(@0)",RooArgList(*tgtvar)); + RooRealVar *rawvar = (RooRealVar*)hdata->addColumn(raw); + rawvar->setRange(0.,2.); + rawvar->setBins(800); + + //clone data and add regression outputs for plotting + RooDataSet *hdataclone = new RooDataSet(*hdata,"hdataclone"); + RooRealVar *meanvar = (RooRealVar*)hdataclone->addColumn(*sigmeanlim); + RooRealVar *widthvar = (RooRealVar*)hdataclone->addColumn(*sigwidthlim); + RooRealVar *a1var = (RooRealVar*)hdataclone->addColumn(*siga1lim); + RooRealVar *a2var = (RooRealVar*)hdataclone->addColumn(*siga2lim); + RooRealVar *n1var = (RooRealVar*)hdataclone->addColumn(*sign1lim); + RooRealVar *n2var = (RooRealVar*)hdataclone->addColumn(*sign2lim); + + + //plot target variable and weighted regression prediction (using numerical integration over reduced testing dataset) + TCanvas *craw = new TCanvas("craw","craw",800,600); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(0.6,1.2,100); + RooPlot *plot = tgtvar->frame(mintgtvar,.6, nBins2); + plot->SetTitle(""); + plot->GetXaxis()->SetTitle("log(generated_enery / raw_energy)"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF")); + plot->Draw(); + TLegend *legend = new TLegend(0.11,0.76,0.3,0.89); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("MC_sample","MC simulation","P"); + legend->AddEntry("Signal_PDF","regression PDF","l"); + legend->Draw(); + craw->SaveAs("RawE"+add1); + craw->SetLogy(); + plot->SetMinimum(0.1); + + TPad *pad_zoom = new TPad("pad_zoom","pad with a zoom on the peak",0.6,0.6,0.9,0.89); + + pad_zoom->Draw(); + pad_zoom->cd(); + RooPlot *plot_zoom; + if(dobarrel) + plot_zoom = tgtvar->frame(-0.02,0.02,75); + else + plot_zoom = tgtvar->frame(-0.04,0.04,75); + pad_zoom->SetGridx(); + pad_zoom->SetGridy(); + hdata->plotOn(plot_zoom,Name("MC_sample_zoom")); + sigpdf->plotOn(plot_zoom,ProjWData(*hdata),Name("Signal_PDF_zoom")); + plot_zoom->SetTitle(" "); + plot_zoom->Draw(); + craw->Update(); + craw->SaveAs("RawElog"+add1); + craw->SaveAs("RawElog"+addroot); +/* + TCanvas *craw2 = new TCanvas("craw2","craw2"); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(0.6,1.2,100); + RooPlot *plot = tgtvar->frame(mintgtvar,.6, nBins2); + plot->SetTitle("Distribution of generated_energy/raw_energy"); + plot->GetXaxis()->SetTitle("generated_enery / raw_energy"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample2")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF2")); + plot->Draw(); + TLegend *legend2 = new TLegend(0.8,0.8,0.9,0.9); + legend2->SetFillColor(kWhite); + legend2->SetLineColor(kWhite); + legend2->AddEntry("MC_sample2","MC Sample","P"); + legend2->AddEntry("Signal_PDF2","Signal PDF","l"); + legend2->Draw(); + + craw2->SaveAs("RawE2"+add1); + craw2->SetLogy(); + plot->SetMinimum(0.1); + craw2->SaveAs("RawElog2"+add1); + craw2->SaveAs("RawElog2"+addroot); + */ + /* TCanvas *craw3 = new TCanvas("craw3","craw3"); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(-0.5,0.6,nBins3); + plot = tgtvar->frame(mintgtvar,.6, nBins3); + plot->SetTitle("Distribution of generated_energy/raw_energy"); + plot->GetXaxis()->SetTitle("log(generated_enery / raw_energy)"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample3")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF3")); + plot->Draw(); + TLegend *legend3 = new TLegend(0.8,0.8,0.9,0.9); + legend3->SetFillColor(kWhite); + legend3->SetLineColor(kWhite); + legend3->AddEntry("MC_sample3","MC Sample","P"); + legend3->AddEntry("Signal_PDF3","Signal PDF","l"); + legend3->Draw(); + + craw3->SaveAs("RawE3"+add1); + craw3->SetLogy(); + plot->SetMinimum(0.1); + craw3->SaveAs("RawElog3"+add1); + craw3->SaveAs("RawElog3"+addroot);*/ + + + //plot distribution of regressed functions over testing dataset + TCanvas *cmean = new TCanvas("cmean","cmean"); //---------------------------------------------------------CANVAS + RooPlot *plotmean = meanvar->frame(-0.5,0.6,100); + plotmean->SetTitle("Signal mean distribution"); + plotmean->GetXaxis()->SetTitle("signal_mean"); + hdataclone->plotOn(plotmean); + plotmean->Draw(); + cmean->SaveAs("mean"+add1); + + TCanvas *cwidth = new TCanvas("cwidth","cwidth"); //------------------------------------------------------CANVAS + //RooPlot *plotwidth = widthvar->frame(Title("hdata vs width"),0.,0.05,100); + RooPlot *plotwidth = widthvar->frame(0.,0.05,100); + plotwidth->SetTitle("Signal width distribution"); + plotwidth->GetXaxis()->SetTitle("signal_width"); + hdataclone->plotOn(plotwidth); + plotwidth->Draw(); + cwidth->SaveAs("width"+add1); + + TCanvas *ca1 = new TCanvas("ca1","ca1"); //------------------------------------------------------------------CANVAS + //RooPlot *plota1 = nvar->frame(Title("hdata vs nvar"),0.,111.,200); + //RooPlot *plota1 = nvar->frame(0.,111.,200); + RooPlot *plota1 = a1var->frame(0.05,10,1000); + plota1->SetTitle("Alpha1 distribution"); + plota1->GetXaxis()->SetTitle("alpha1"); + hdataclone->plotOn(plota1); + plota1->Draw(); + ca1->SaveAs("a1"+add1); + + TCanvas *ca2 = new TCanvas("ca2","ca2"); //------------------------------------------------------------------CANVAS + //RooPlot *plota2 = nvar->frame(Title("hdata vs nvar"),0.,111.,200); + //RooPlot *plota2 = nvar->frame(0.,111.,200); + RooPlot *plota2 = a2var->frame(0.05,10,1000); + plota2->SetTitle("Alpha2 distribution"); + plota2->GetXaxis()->SetTitle("alpha2"); + hdataclone->plotOn(plota2); + plota2->Draw(); + ca2->SaveAs("a2"+add1); + + TCanvas *cn1 = new TCanvas("cn1","cn1"); //------------------------------------------------------------------CANVAS + //RooPlot *plotn1 = nvar->frame(Title("hdata vs nvar"),0.,111.,200); + //RooPlot *plotn1 = nvar->frame(0.,111.,200); + //nmax + RooPlot *plotn1 = n1var->frame(0,nmax,nbinsn); + plotn1->SetTitle("n1 distribution"); + plotn1->GetXaxis()->SetTitle("n1"); + hdataclone->plotOn(plotn1); + plotn1->Draw(); + cn1->SaveAs("n1"+add1); + + TCanvas *cn2 = new TCanvas("cn2","cn2"); //---------------------------------------------------------------CANVAS + //RooPlot *plotn2 = n2var->frame(Title("hdata vs n2var"),0.,111.,100); + RooPlot *plotn2 = n2var->frame(0,nmax,nbinsn); + plotn2->SetTitle("n2 distribution"); + plotn2->GetXaxis()->SetTitle("n2"); + hdataclone->plotOn(plotn2); + plotn2->Draw(); + cn2->SaveAs("n2"+add1); + + TCanvas *ceta = new TCanvas("ceta","ceta"); //------------------------------------------------------------CANVAS + RooPlot *ploteta = scetavar->frame(-2.6,2.6,200); + ploteta->SetTitle("Eta distribution"); + ploteta->GetXaxis()->SetTitle("eta"); + hdataclone->plotOn(ploteta); + ploteta->Draw(); + ceta->SaveAs("eta"+add1); + + + //create histograms for eraw/etrue and ecor/etrue to quantify regression performance + TH1 *heraw = hdata->createHistogram("heraw",*rawvar,Binning(800,0.,2.)); + TH1 *hecor = hdata->createHistogram("hecor",*ecorvar); + + //heold->SetLineColor(kRed); + hecor->SetLineColor(kBlue); + heraw->SetLineColor(kMagenta); + + hecor->GetXaxis()->SetRangeUser(0.6,1.2); + //heold->GetXaxis()->SetRangeUser(0.6,1.2); + hecor->SetTitle("magenta: raw/true - blue: mean*raw/true"); + TCanvas *cresponse = new TCanvas("cresponse","cresponse"); //---------------------------------------------CANVAS + gPad->SetGridx(); + gPad->SetGridy(); + hecor->Draw("HIST"); + //heold->Draw("HISTSAME"); + heraw->Draw("HISTSAME"); + cresponse->SaveAs("response"+add1); + cresponse->SetLogy(); + cresponse->SaveAs("responselog"+add1); + //cresponse->SetLogy(kFALSE); + cresponse->SaveAs("responselog"+addroot); + + printf("make fine histogram\n"); + TH1 *hecorfine = hdata->createHistogram("hecorfine",*ecorvar,Binning(20e3,0.,2.)); + TH1 *hrawfine = hdata->createHistogram("hrawfine",*rawvar,Binning(20e3,0.,2.)); + printf("calc effsigma\n"); + + double effsigmaCor = effSigma(hecorfine); + double effsigmaRaw = effSigma(hrawfine); + printf("effsigmaCor = %5f - effsigmaRaw = %5f\n",effsigmaCor,effsigmaRaw); + + //new TCanvas; + //RooPlot *ploteold = testvar.frame(0.6,1.2,100); + //hdatasigtest->plotOn(ploteold); + //ploteold->Draw(); + + //new TCanvas; + //RooPlot *plotecor = ecorvar->frame(0.6,1.2,100); + //hdatasig->plotOn(plotecor); + //plotecor->Draw(); + + //________________________________________________________________________________________________________________________ + //________________________________________________________________________________________________________________________ + //________________________________________________________________________________________________________________________ + RooRealVar *scphi = ws->var("var_2"); + //RooRealVar *r9 = ws->var("var_3"); + RooRealVar *scetawidth = ws->var("var_4"); + RooRealVar *scphiwidth = ws->var("var_5"); + RooRealVar *scnclusters = ws->var("var_6"); + RooRealVar *hoveretower = ws->var("var_7"); + RooRealVar *rho = ws->var("var_8"); + RooRealVar *nvtx = ws->var("var_9"); + + RooFormulaVar meanFormula("mean","","exp(@0)*@1",RooArgList(*sigmeanlim,RooConst(1.))); + RooRealVar *sigmean = (RooRealVar*)hdata->addColumn(meanFormula); + sigmean->setRange(0.,2.); // + + RooRealVar *pt; + RooRealVar *rawEnergy = ws->var("var_0"); + + if(!dobarrel) { + RooRealVar *preshowerEnergy = ws->var("var_18"); + //formula for Pt true_energy/Cosh(eta) = tgtvar*rawvar/cosh(eta) + RooFormulaVar ptFormula("pt","","exp(@0)*@1*(1+@2)*1./(cosh(@3))",RooArgList(*tgtvar,*rawEnergy,*preshowerEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(0.,2500); // + } + else { + RooFormulaVar ptFormula("pt","","exp(@0)*@1*1./(cosh(@2))",RooArgList(*tgtvar,*rawEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(0.,5000); // + } + + //Set ranges for variables + scetavar->setRange(-2.5,2.5); + scphi->setRange(-4.,4.); + r9->setRange(0.7,1.); + scetawidth->setRange(0.,0.025); + scphiwidth->setRange(0.,0.2); + scnclusters->setRange(0.,20.); + hoveretower->setRange(0.,0.2); + rho->setRange(0.,30.); + nvtx->setRange(0.,50.); + + //Set Binning + hoveretower->setBins(50.); + + //Define Canvas properties + Double_t canvas_width(1300); + Double_t canvas_height(800); + +//create canvas for ecor (corrected energy) + + Double_t plotEMin(0.9), plotEMax(1.1); + gStyle->SetOptStat(0); + + + TCanvas *canvas_ecor = new TCanvas("corrected_energy","ecor",canvas_width,canvas_height); + + canvas_ecor->Divide(3,3); + + canvas_ecor->cd(1); + plot_Profile(hdata, dobarrel,scetavar,ecorvar, rawvar,"eta", "energy/generated_energy",plotEMin, plotEMax,-1.5, 1.5); + + canvas_ecor->cd(2); + plot_Profile(hdata, dobarrel,scphi,ecorvar, rawvar,"phi", "energy/generated_energy",plotEMin, plotEMax,-2., 2.); + + canvas_ecor->cd(3); + plot_Profile(hdata, dobarrel,r9,ecorvar, rawvar,"R9", "energy/generated_energy",plotEMin, plotEMax,0.7,1.); + + canvas_ecor->cd(4); + plot_Profile(hdata, dobarrel,scetawidth,ecorvar, rawvar,"scEtaWidth", "energy/generated_energy",plotEMin, plotEMax,0.005,0.014); + + canvas_ecor->cd(5); + plot_Profile(hdata, dobarrel,scphiwidth,ecorvar, rawvar,"scPhiWidth", "energy/generated_energy",plotEMin, plotEMax,0.,0.12); + + canvas_ecor->cd(6); + if(dobarrel) + plot_Profile(hdata, dobarrel,pt,ecorvar, rawvar,"Pt", "energy/generated_energy",plotEMin, plotEMax,0.,5000); + else + plot_Profile(hdata, dobarrel,pt,ecorvar, rawvar,"Pt", "energy/generated_energy",plotEMin, plotEMax,0.,2500); + canvas_ecor->cd(7); + plot_Profile(hdata, dobarrel,hoveretower,ecorvar, rawvar,"hoveretower", "energy/generated_energy",0.7, plotEMax,0.,0.16); + + canvas_ecor->cd(8); + plot_Profile(hdata, dobarrel,rho,ecorvar, rawvar,"rho", "energy/generated_energy",plotEMin, plotEMax,0.,30); + + canvas_ecor->cd(9); + plot_Profile(hdata, dobarrel,nvtx,ecorvar, rawvar,"number of vertices", "energy/generated_energy",plotEMin, plotEMax,0.,40); + + //save canvas_ecor + canvas_ecor->SaveAs("corrected_energy"+add2); + canvas_ecor->SaveAs("corrected_energy"+addroot); + + +//create canvas for mean_of_gaussian + + /* TObjArray* Arr = new TObjArray(); + TCanvas *canvas_ecor_fit = new TCanvas("ecor_fit","ecor_fit",canvas_width,canvas_height); + canvas_ecor_fit->Divide(2,2); + + canvas_ecor_fit->cd(1); + plot_Slices(hdata,dobarrel,Arr,scetavar,ecorvar, rawvar,"hdata_hist_00000012_1","hdata_hist_00000012_chi2","eta","energy/generated_energy",plotEMin, plotEMax,-1.5,1.5); + //canvas_ecor_fit->cd(2); + //plot_Slices(hdata,dobarrel,Arr,scphi,ecorvar, rawvar,"hdata_hist_00000014_1","hdata_hist_00000014_chi2","phi","energy/generated_energy",plotEMin, plotEMax,-2,2); + canvas_ecor_fit->cd(2); + plot_Slices(hdata,dobarrel,Arr,r9,ecorvar, rawvar,"hdata_hist_00000014_1","hdata_hist_00000016_chi2","R9","energy/generated_energy",plotEMin, plotEMax,0.7,1); + //canvas_ecor_fit->cd(4); + //plot_Slices(hdata,dobarrel,Arr,scetawidth,ecorvar, rawvar,"hdata_hist_00000018_1","hdata_hist_00000018_chi2","scEtaWidth","energy/generated_energy",plotEMin, plotEMax,0.005,0.014,0.004,0.04); + //canvas_ecor_fit->cd(5); + //plot_Slices(hdata,dobarrel,Arr,scphiwidth,ecorvar, rawvar,"hdata_hist_0000001a_1","hdata_hist_0000001a_chi2","scPhiWidth","energy/generated_energy",plotEMin, plotEMax,0.,0.12,0.,0.12); + canvas_ecor_fit->cd(3); + plot_Slices(hdata,dobarrel,Arr,pt,ecorvar, rawvar,"hdata_hist_00000016_1","hdata_hist_0000001c_chi2","Pt","energy/generated_energy",plotEMin, plotEMax,0.,5000,0.,5000); + //canvas_ecor_fit->cd(7); + //plot_Slices(hdata,dobarrel,Arr,hoveretower,ecorvar, rawvar,"hdata_hist_0000001e_1","hdata_hist_0000001e_chi2","hoveretower","energy/generated_energy",0.7, plotEMax,0.,0.16,0.,0.16); + canvas_ecor_fit->cd(4); + plot_Slices(hdata,dobarrel,Arr,rho,ecorvar, rawvar,"hdata_hist_00000018_1","hdata_hist_00000020_chi2","rho","energy/generated_energy",plotEMin, plotEMax,0.,30,0.,30); + //canvas_ecor_fit->cd(9); + //plot_Slices(hdata,dobarrel,Arr,nvtx,ecorvar, rawvar,"hdata_hist_00000022_1","hdata_hist_00000022_chi2","numberOfVertices","energy/generated_energy",plotEMin, plotEMax,0.,40,0.,40); + + +//save canvas_rawvar + canvas_ecor_fit->SaveAs("mean_of_gaussian_energy"+add2); + canvas_ecor_fit->SaveAs("mean_of_gaussian"+addroot); + +//create canvas for mean (#mu) + Double_t plotMeanMin(0.9), plotMeanMax(1.1); + + TCanvas *canvas_sigmean = new TCanvas("signal_mean","sigmean",canvas_width,canvas_height); + gPad->SetGridx(); + gPad->SetGridy(); + canvas_sigmean->Divide(3,3); + canvas_sigmean->cd(1); + plot_Mean(hdata,dobarrel,scetavar,sigmean, "eta", "Mu",plotMeanMin, plotMeanMax,-1.5, 1.5); + canvas_sigmean->cd(2); + plot_Mean(hdata,dobarrel,scphi,sigmean, "phi", "Mu",plotMeanMin, plotMeanMax,-2,2); + canvas_sigmean->cd(3); + plot_Mean(hdata,dobarrel,r9,sigmean, "R9", "Mu",plotMeanMin, plotMeanMax,0.7,1); + canvas_sigmean->cd(4); + plot_Mean(hdata,dobarrel,scetawidth,sigmean,"scEtaWidth", "Mu",plotMeanMin, plotMeanMax,0.005,0.014); + canvas_sigmean->cd(5); + plot_Mean(hdata,dobarrel,scphiwidth,sigmean, "scPhiWidth", "Mu",plotMeanMin, plotMeanMax,0.,0.12); + canvas_sigmean->cd(6); + plot_Mean(hdata,dobarrel,pt,sigmean, "pt", "Mu",plotMeanMin, plotMeanMax,0., 5000); + canvas_sigmean->cd(7); + plot_Mean(hdata,dobarrel,hoveretower,sigmean, "hoveretower", "Mu",plotMeanMin, 1.5,0.,0.16); + canvas_sigmean->cd(8); + plot_Mean(hdata,dobarrel,rho,sigmean, "rho", "Mu",plotMeanMin, plotMeanMax,0.,30.); + canvas_sigmean->cd(9); + plot_Mean(hdata,dobarrel,nvtx,sigmean, "nvtx", "Mu",plotMeanMin, plotMeanMax,0.,40.); + + +//save canvas_sigmean + canvas_sigmean->SaveAs("signal_mean"+add2); + canvas_sigmean->SaveAs("signal_mean"+addroot); + delete hdata; + hdata=0;*/ +} + +Double_t effSigma(TH1 * hist) +{ + + TAxis *xaxis = hist->GetXaxis(); + Int_t nb = xaxis->GetNbins(); + if(nb < 10) + { + cout << "effsigma: Not a valid histo. nbins = " << nb << endl; + return 0.; + } + + Double_t bwid = xaxis->GetBinWidth(1); + if(bwid == 0) + { + cout << "effsigma: Not a valid histo. bwid = " << bwid << endl; + return 0.; + } + Double_t xmax = xaxis->GetXmax(); + Double_t xmin = xaxis->GetXmin(); + Double_t ave = hist->GetMean(); + Double_t rms = hist->GetRMS(); + + Double_t total=0.; + for(Int_t i=0; iGetBinContent(i); + } +// if(total < 100.) { +// cout << "effsigma: Too few entries " << total << endl; +// return 0.; +// } + Int_t ierr=0; + Int_t ismin=999; + + Double_t rlim=0.683*total; + Int_t nrms=rms/(bwid); // Set scan size to +/- rms + if(nrms > nb/10) nrms=nb/10; // Could be tuned... + + Double_t widmin=9999999.; + for(Int_t iscan=-nrms;iscanGetBinContent(ibm); + total=bin; + for(Int_t j=1;jGetBinContent(jbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + if(kbm > 0) + { + kbm--; + xk-=bwid; + bin=hist->GetBinContent(kbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + } + Double_t dxf=(total-rlim)*bwid/bin; + Double_t wid=(xj-xk+bwid-dxf)*0.5; + if(wid < widmin) + { + widmin=wid; + ismin=iscan; + } + } + if(ismin == nrms || ismin == -nrms) ierr=3; + if(ierr != 0) cout << "effsigma: Error of type " << ierr << endl; + + return widmin; + +} + +void plot_Profile(RooDataSet* hdata,bool dobarrel,RooRealVar *xvar,RooRealVar *ecorvar, RooRealVar *rawvar,TString xLabel, TString yLabel,Double_t plotEMin, Double_t plotEMax,Double_t plotXMin_barrel, Double_t plotXMax_barrel) { + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2D_ecor = hdata->createHistogram(*xvar,*ecorvar); + TH2* histo2D_raw = hdata->createHistogram(*xvar,*rawvar); + TProfile *hprof_ecor = histo2D_ecor->ProfileX(); + TProfile *hprof_raw = histo2D_raw->ProfileX(); + + hprof_ecor->SetErrorOption("s"); + hprof_raw->SetErrorOption("s"); + + hprof_raw->GetYaxis()->SetRangeUser(plotEMin,plotEMax); + if(dobarrel) + hprof_raw->GetXaxis()->SetRangeUser(plotXMin_barrel,plotXMax_barrel); + + hprof_raw->GetXaxis()->SetTitle(xLabel); + hprof_raw->GetYaxis()->SetTitle(yLabel); + hprof_ecor->SetMarkerStyle(7); + hprof_ecor->SetMarkerColor(kBlue); + hprof_raw->SetMarkerColor(kRed); + hprof_raw->SetMarkerStyle(7); + hprof_raw->SetFillColor(kMagenta); + hprof_raw->SetFillStyle(3003); + hprof_raw->Draw("E3"); + hprof_raw->Draw("hist same p"); + hprof_ecor->Draw("same"); +} + +void plot_Slices(RooDataSet* hdata,bool dobarrel,TObjArray *Arr,RooRealVar *xvar,RooRealVar *ecorvar, RooRealVar *rawvar, TString name_of_hist_mean,TString name_of_hist_chi2,TString xLabel, TString yLabel,Double_t plotEMin, Double_t plotEMax,Double_t plotXMin, Double_t plotXMax, Double_t plotXMin_endcap, Double_t plotXMax_endcap) { + gPad->SetGridx(); + gPad->SetGridy(); + TH2* h2_ecor = hdata->createHistogram(*xvar,*ecorvar); + Double_t m1(0.98), m2(1.02); + TString option_fit="RG5"; + TF1 *func_gaus = new TF1("func_gaus","gaus(0)",m1,m2); + func_gaus->SetParameters(1,1,1); + func_gaus->SetRange(m1,m2); + h2_ecor->FitSlicesY(func_gaus,0,-1,0,option_fit,Arr); + //h2_ecor->FitSlicesY(0,0,-1,0,"G5Q",Arr); + //Arr->Print(); + TH1D *h2_ecor_1 = (TH1D*)gDirectory->Get(name_of_hist_mean); + h2_ecor_1->SetMarkerStyle(7); + h2_ecor_1->SetMarkerColor(kBlue); + + TH1D *h2_ecor_chi2 = (TH1D*)gDirectory->Get(name_of_hist_chi2); + h2_ecor_chi2->SetMarkerStyle(7); + h2_ecor_chi2->SetMarkerColor(kGreen); + + TH2* histo2D_ecor = hdata->createHistogram(*xvar,*ecorvar); + TProfile *hprof_ecor = histo2D_ecor->ProfileX(); + hprof_ecor->GetYaxis()->SetRangeUser(plotEMin,plotEMax); + if(dobarrel) + hprof_ecor->GetXaxis()->SetRangeUser(plotXMin,plotXMax); + else if(!dobarrel && plotXMin_endcap!=0 && plotXMin_endcap!=0) + hprof_ecor->GetXaxis()->SetRangeUser(plotXMin_endcap,plotXMax_endcap); + hprof_ecor->GetXaxis()->SetTitle(xLabel); + hprof_ecor->GetYaxis()->SetTitle(yLabel); + hprof_ecor->SetMarkerStyle(7); + hprof_ecor->SetMarkerColor(kRed); + hprof_ecor->SetFillColor(kMagenta); + hprof_ecor->SetFillStyle(3003); + hprof_ecor->Draw("E3"); + hprof_ecor->Draw("hist same p"); + h2_ecor_1->Draw("same"); + //h2_ecor_chi2->Draw("hist same p"); +} + +void plot_Mean(RooDataSet* hdata,bool dobarrel,RooRealVar *xvar,RooRealVar *sigmean, TString xLabel, TString yLabel,Double_t plotMeanMin, Double_t plotMeanMax,Double_t plotXMin_barrel, Double_t plotXMax_barrel) { + gPad->SetGridx(); + gPad->SetGridy(); + + TH2* histo2_sigmean = hdata->createHistogram(*xvar,*sigmean); + TProfile *hprof_sigmean_sceta = histo2_sigmean->ProfileX(); + hprof_sigmean_sceta->SetErrorOption("s"); + hprof_sigmean_sceta->GetYaxis()->SetRangeUser(plotMeanMin,plotMeanMax); + if(dobarrel) hprof_sigmean_sceta->GetXaxis()->SetRangeUser(plotXMin_barrel,plotXMax_barrel); + hprof_sigmean_sceta->GetXaxis()->SetTitle(xLabel); + hprof_sigmean_sceta->GetYaxis()->SetTitle(yLabel); + hprof_sigmean_sceta->Draw(); +} + diff --git a/macros/examples/eregtestingLog.C b/macros/examples/eregtestingLog.C new file mode 100644 index 0000000..82317a0 --- /dev/null +++ b/macros/examples/eregtestingLog.C @@ -0,0 +1,724 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "TH2.h" +#include "TProfile.h" +#include "TF1.h" +#include "TStyle.h" +using namespace RooFit; + +//effsigma function from Chris +Double_t effSigma(TH1 * hist); + +void plot_Profile(RooDataSet *hdata, bool dobarrel, RooRealVar *xvar,RooRealVar *ecorvar, RooRealVar *rawvar,TString xLabel, TString yLabel,Double_t plotEMin, Double_t plotEMax,Double_t plotXMin_barrel, Double_t plotXMax_barrel); + +void plot_Slices(RooDataSet* hdata,bool dobarrel,TObjArray *Arr,RooRealVar *xvar,RooRealVar *ecorvar, RooRealVar *rawvar,TString name_of_hist_mean,TString name_of_hist_chi2, TString xLabel, TString yLabel,Double_t plotEMin, Double_t plotEMax,Double_t plotXMin, Double_t plotXMax, Double_t plotXMin_endcap=0, Double_t plotXMax_endcap=0); + +void plot_Mean(RooDataSet* hdata,bool dobarrel,RooRealVar *xvar,RooRealVar *sigmean, TString xLabel, TString yLabel,Double_t plotMeanMin, Double_t plotMeanMax,Double_t plotXMin_barrel, Double_t plotXMax_barrel); + +void eregtestingLog(TString dirname = "Barrel_Log_sig3_alpha2-3_evts15_pileup", bool dobarrel=true, bool doele=false) { + + + //output dir + //TString dirname = "Barrel_Log_sig3_alpha3-1_evts_n100"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + //1 = testing, 0 = training + TCut cutUsed = "(event%15==1)"; + Double_t nmax=500.; + Double_t mintgtvar = -0.5, nBins1 = 100, nBins2=250,nBins3 =800; + + //read workspace from training + TString fname; + TString add1, addroot; //extension of png files - first part + if (doele && dobarrel) + { + fname = "wereg_ele_eb.root"; + add1 = "_ele_eb.png"; + } + else if (doele && !dobarrel) + { + fname = "wereg_ele_ee.root"; + add1 = "_ele_ee.png"; + } + else if (!doele && dobarrel) + { + fname = "wereg_ph_eb.root"; + add1 = "_ph_eb.png"; + addroot = "_ph_eb.root"; + } + else if (!doele && !dobarrel) + { + fname = "wereg_ph_ee.root"; + add1 = "_ph_ee.png"; + addroot = "_ph_ee.root"; + } + addroot = ""+addroot; + add1 = ""+add1; + TString add2(add1); //extension of png files - second part + + //Workspace + TString infile = TString::Format("./%s",fname.Data()); + TFile *fws = TFile::Open(infile); + RooWorkspace *ws = (RooWorkspace*)fws->Get("wereg"); + + //read variables from workspace + RooGBRTargetFlex *meantgt = static_cast(ws->arg("sigmeant")); + RooRealVar *tgtvar = ws->var("tgtvar"); + + + RooArgList vars; + vars.add(meantgt->FuncVars()); + vars.add(*tgtvar); + + //read testing dataset from TTree + RooRealVar weightvar("weightvar","",1.); + + TChain *tree; + tree = new TChain("promptTree"); + tree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-300To3000.root"); + tree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-5To300_lessstat.root"); + + //selection cuts for testing + TCut selcut; + + if (dobarrel) + { + selcut = "etrue*pt/energy >=250. && etrue*pt/energy<=3000 && abs(scEta)<1.5 && kSaturated[12]!=1 && nvtx>=1"; + } + else + { + selcut = "etrue*pt/energy >=250. && etrue*pt/energy<=3000 && abs(scEta)>1.5 && kSaturated[12]!=1 && nvtx >=1" ; + } + TCut selweight = "(1)"; + TCut prescale10alt = "(event%10==1)"; + TCut prescale20alt = "(event%20==1)"; + TCut prescale25 = "(event%25==0)"; + TCut oddevents = "(event%2==1)"; + TCut prescale100alt = "(event%100==1)"; + TCut prescale1000alt = "(event%1000==1)"; + TCut prescale50alt = "(event%50==1)"; + + if (doele) + weightvar.SetTitle(prescale100alt*selcut); + else + weightvar.SetTitle(cutUsed*selweight*selcut); + + //make testing dataset + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",tree,vars,weightvar); + + //retrieve full pdf from workspace + RooAbsPdf *sigpdf = ws->pdf("sigpdf"); + //sigpdf->Print(); + //input variable corresponding to sceta + RooRealVar *scetavar = ws->var("var_1"); + + //R9 + RooRealVar *r9 = ws->var("var_3"); + + //regressed output functions + RooAbsReal *sigmeanlim = ws->function("sigmeanlim"); + RooAbsReal *sigwidthlim = ws->function("sigwidthlim"); + RooAbsReal *sign1lim = ws->function("sign1lim"); + RooAbsReal *sign2lim = ws->function("sign2lim"); + + //formula for corrected energy/true energy ( 1.0/(etrue/eraw) * regression mean) + RooFormulaVar ecor("ecor","","1./(exp(@0))*exp(@1)",RooArgList(*tgtvar,*sigmeanlim)); + RooRealVar *ecorvar = (RooRealVar*)hdata->addColumn(ecor); + ecorvar->setRange(0.,2.); + ecorvar->setBins(800); + + //formula for raw energy/true energy (1.0/(etrue/eraw)) + RooFormulaVar raw("raw","","1./exp(@0)",RooArgList(*tgtvar)); + RooRealVar *rawvar = (RooRealVar*)hdata->addColumn(raw); + rawvar->setRange(0.,2.); + rawvar->setBins(800); + + //clone data and add regression outputs for plotting + RooDataSet *hdataclone = new RooDataSet(*hdata,"hdataclone"); + RooRealVar *meanvar = (RooRealVar*)hdataclone->addColumn(*sigmeanlim); + RooRealVar *widthvar = (RooRealVar*)hdataclone->addColumn(*sigwidthlim); + RooRealVar *n1var = (RooRealVar*)hdataclone->addColumn(*sign1lim); + RooRealVar *n2var = (RooRealVar*)hdataclone->addColumn(*sign2lim); + + + //plot target variable and weighted regression prediction (using numerical integration over reduced testing dataset) + TCanvas *craw = new TCanvas("craw","craw",800,600); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(0.6,1.2,100); + RooPlot *plot = tgtvar->frame(mintgtvar,.6, nBins3); + //plot->SetTitle("Distribution of log(generated_energy/raw_energy)"); + plot->SetTitle(""); + plot->GetXaxis()->SetTitle("log(generated_enery / raw_energy)"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF")); + plot->Draw(); + TLegend *legend = new TLegend(0.11,0.8,0.3,0.89); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("MC_sample","MC simulation","P"); + legend->AddEntry("Signal_PDF","regression PDF","l"); + legend->Draw(); + craw->SaveAs("RawE"+add1); + craw->SetLogy(); + plot->SetMinimum(0.1); + + TPad *pad_zoom = new TPad("pad_zoom","pad with a zoom on the peak",0.6,0.6,0.9,0.89); + + pad_zoom->Draw(); + pad_zoom->cd(); + RooPlot *plot_zoom; + if(dobarrel) + plot_zoom = tgtvar->frame(-0.02,0.02,75); + else + plot_zoom = tgtvar->frame(-0.04,0.04,75); + pad_zoom->SetGridx(); + pad_zoom->SetGridy(); + hdata->plotOn(plot_zoom,Name("MC_sample_zoom")); + sigpdf->plotOn(plot_zoom,ProjWData(*hdata),Name("Signal_PDF_zoom")); + plot_zoom->SetTitle(""); + plot_zoom->Draw(); + craw->Update(); + craw->SaveAs("RawElog"+add1); + craw->SaveAs("RawElog"+addroot); +/* TCanvas *craw2 = new TCanvas("craw2","craw2"); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(0.6,1.2,100); + plot = tgtvar->frame(mintgtvar,.6, nBins2); + plot->SetTitle("Distribution of log(generated_energy/raw_energy)"); + plot->GetXaxis()->SetTitle("log(generated_enery / raw_energy)"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample2")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF2")); + plot->Draw(); + TLegend *legend2 = new TLegend(0.8,0.8,0.9,0.9); + legend2->SetFillColor(kWhite); + legend2->SetLineColor(kWhite); + legend2->AddEntry("MC_sample2","MC Sample","P"); + legend2->AddEntry("Signal_PDF2","Signal PDF","l"); + legend2->Draw(); + + craw2->SaveAs("RawE2"+add1); + craw2->SetLogy(); + plot->SetMinimum(0.1); + craw2->SaveAs("RawElog2"+add1); + craw2->SaveAs("RawElog2"+addroot); + + TCanvas *craw3 = new TCanvas("craw3","craw3"); //------------------------------------------------------------CANVAS + //RooPlot *plot = tgtvar->frame(-0.5,0.6,nBins3); + plot = tgtvar->frame(mintgtvar,.6, nBins3); + plot->SetTitle("Distribution of log(generated_energy/raw_energy)"); + plot->GetXaxis()->SetTitle("log(generated_enery / raw_energy)"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata->plotOn(plot,Name("MC_sample3")); + sigpdf->plotOn(plot,ProjWData(*hdata),Name("Signal_PDF3")); + plot->Draw(); + TLegend *legend3 = new TLegend(0.8,0.8,0.9,0.9); + legend3->SetFillColor(kWhite); + legend3->SetLineColor(kWhite); + legend3->AddEntry("MC_sample3","MC Sample","P"); + legend3->AddEntry("Signal_PDF3","Signal PDF","l"); + legend3->Draw(); + + craw3->SaveAs("RawE3"+add1); + craw3->SetLogy(); + plot->SetMinimum(0.1); + craw3->SaveAs("RawElog3"+add1); + craw3->SaveAs("RawElog3"+addroot); + + + */ //plot distribution of regressed functions over testing dataset + TCanvas *cmean = new TCanvas("cmean","cmean"); //---------------------------------------------------------CANVAS + RooPlot *plotmean = meanvar->frame(-0.5,0.6,100); + plotmean->SetTitle("signal mean distribution"); + plotmean->GetXaxis()->SetTitle("signal_mean"); + hdataclone->plotOn(plotmean); + plotmean->Draw(); + cmean->SaveAs("mean"+add1); + + TCanvas *cwidth = new TCanvas("cwidth","cwidth"); //------------------------------------------------------CANVAS + //RooPlot *plotwidth = widthvar->frame(Title("hdata vs width"),0.,0.05,100); + RooPlot *plotwidth = widthvar->frame(0.,0.05,100); + plotwidth->SetTitle("signal width distribution"); + plotwidth->GetXaxis()->SetTitle("signal_width"); + hdataclone->plotOn(plotwidth); + plotwidth->Draw(); + cwidth->SaveAs("width"+add1); + + TCanvas *cn1 = new TCanvas("cn1","cn1"); //------------------------------------------------------------------CANVAS + //RooPlot *plotn1 = nvar->frame(Title("hdata vs nvar"),0.,111.,200); + //RooPlot *plotn1 = nvar->frame(0.,111.,200); + RooPlot *plotn1 = n1var->frame(1.,nmax,1000); + plotn1->SetTitle("n1 distribution"); + plotn1->GetXaxis()->SetTitle("n1"); + hdataclone->plotOn(plotn1); + plotn1->Draw(); + cn1->SaveAs("n1"+add1); + + TCanvas *cn2 = new TCanvas("cn2","cn2"); //---------------------------------------------------------------CANVAS + //RooPlot *plotn2 = n2var->frame(Title("hdata vs n2var"),0.,111.,100); + RooPlot *plotn2 = n2var->frame(1.,nmax,1000); + plotn2->SetTitle("n2 distribution"); + plotn2->GetXaxis()->SetTitle("n2"); + hdataclone->plotOn(plotn2); + plotn2->Draw(); + cn2->SaveAs("n2"+add1); + + TCanvas *ceta = new TCanvas("ceta","ceta"); //------------------------------------------------------------CANVAS + RooPlot *ploteta = scetavar->frame(-2.6,2.6,200); + ploteta->SetTitle("eta distribution"); + ploteta->GetXaxis()->SetTitle("eta"); + hdataclone->plotOn(ploteta); + ploteta->Draw(); + ceta->SaveAs("eta"+add1); + + + //create histograms for eraw/etrue and ecor/etrue to quantify regression performance + TH1 *heraw = hdata->createHistogram("heraw",*rawvar,Binning(800,0.,2.)); + TH1 *hecor = hdata->createHistogram("hecor",*ecorvar); + + //heold->SetLineColor(kRed); + hecor->SetLineColor(kBlue); + heraw->SetLineColor(kMagenta); + + hecor->GetXaxis()->SetRangeUser(0.6,1.2); + //heold->GetXaxis()->SetRangeUser(0.6,1.2); + hecor->SetTitle("magenta: raw/true - blue: mean*raw/true"); + TCanvas *cresponse = new TCanvas("cresponse","cresponse"); //---------------------------------------------CANVAS + gPad->SetGridx(); + gPad->SetGridy(); + hecor->Draw("HIST"); + //heold->Draw("HISTSAME"); + heraw->Draw("HISTSAME"); + cresponse->SaveAs("response"+add1); + cresponse->SetLogy(); + cresponse->SaveAs("responselog"+add1); + //cresponse->SetLogy(kFALSE); + cresponse->SaveAs("responselog"+addroot); + + ofstream file_effsigma; + file_effsigma.open ("../outputs/effectiveSigma.txt", ios::out | ios::app); + if (cutUsed == "(event%2==1)") + file_effsigma << dirname << "_testing,"; + else if (cutUsed == "(event%2==0)") + file_effsigma << dirname << "_training,"; + + printf("make fine histogram\n"); + TH1 *hecorfine = hdata->createHistogram("hecorfine",*ecorvar,Binning(20e3,0.,2.)); + TH1 *hrawfine = hdata->createHistogram("hrawfine",*rawvar,Binning(20e3,0.,2.)); + //printf("calc effsigma\n"); + double effsigmaCor = effSigma(hecorfine); + double effsigmaRaw = effSigma(hrawfine); + //printf("effsigmaCor = %5f - effsigmaRaw = %5f\n",effsigmaCor,effsigmaRaw); + file_effsigma << effsigmaRaw << "," << effsigmaCor << "\n"; + file_effsigma.close(); + + /* Double_t xx=0.2; + TH1 *h1 = hdata->createHistogram("tgtvar",*tgtvar,Binning(10,-xx,xx)); + RooAbsReal *signal = (RooAbsReal*)sigpdf; + TH1 *h2 = signal->createHistogram("tgtvar",*tgtvar,Binning(10,-xx,xx)); + Int_t n=10; + Double_t res[n], x[n]; + for (Int_t i=0; iChi2Test(h2,"UU P CHI2/NDF",res); + std::cout << "chi2/ndf "<< p << std::endl; + //h2->Draw(); + + TGraph *resgr = new TGraph(n,x,res); + resgr->GetXaxis()->SetRangeUser(-xx,xx); + resgr->GetYaxis()->SetRangeUser(-.9,.9); + resgr->GetYaxis()->SetTitle("Normalized Residuals"); + resgr->SetMarkerStyle(21); + resgr->SetMarkerColor(2); + resgr->SetMarkerSize(.9); + resgr->SetTitle("Normalized Residuals"); + resgr->Draw("APL"); +*/ + //h2->SetMarkerColor(kBlue); + //h2->SetMarkerStyle(8); + //h2->Scale(1./h2->Integral()); + //h2->Draw("hist p"); + //h1->Scale(1./h1->Integral()); + //h1->SetMarkerColor(kRed); + //h1->SetMarkerStyle(8); + //h1->Draw("same hist p"); + + //new TCanvas; + //RooPlot *ploteold = testvar.frame(0.6,1.2,100); + //hdatasigtest->plotOn(ploteold); + //ploteold->Draw(); + + //new TCanvas; + //RooPlot *plotecor = ecorvar->frame(0.6,1.2,100); + //hdatasig->plotOn(plotecor); + //plotecor->Draw(); + + //________________________________________________________________________________________________________________________ + //________________________________________________________________________________________________________________________ + //________________________________________________________________________________________________________________________ + // + RooRealVar *scphi = ws->var("var_2"); + //RooRealVar *r9 = ws->var("var_3"); + RooRealVar *scetawidth = ws->var("var_4"); + RooRealVar *scphiwidth = ws->var("var_5"); + RooRealVar *scnclusters = ws->var("var_6"); + RooRealVar *hoveretower = ws->var("var_7"); + RooRealVar *rho = ws->var("var_8"); + RooRealVar *nvtx = ws->var("var_9"); + + RooFormulaVar meanFormula("mean","","exp(@0)*@1",RooArgList(*sigmeanlim,RooConst(1.))); + RooRealVar *sigmean = (RooRealVar*)hdata->addColumn(meanFormula); + sigmean->setRange(0.,2.); // + + RooRealVar *pt; + RooRealVar *rawEnergy = ws->var("var_0"); + + if(!dobarrel) { + RooRealVar *preshowerEnergy = ws->var("var_18"); + //formula for Pt true_energy/Cosh(eta) = tgtvar*rawvar/cosh(eta) + RooFormulaVar ptFormula("pt","","exp(@0)*@1*(1+@2)*1./(cosh(@3))",RooArgList(*tgtvar,*rawEnergy,*preshowerEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(0.,2500); // + } + else { + RooFormulaVar ptFormula("pt","","exp(@0)*@1*1./(cosh(@2))",RooArgList(*tgtvar,*rawEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(0.,5000); // + } + + //Set ranges for variables + scetavar->setRange(-2.5,2.5); + scphi->setRange(-4.,4.); + r9->setRange(0.7,1.); + scetawidth->setRange(0.,0.025); + scphiwidth->setRange(0.,0.2); + scnclusters->setRange(0.,20.); + hoveretower->setRange(0.,0.2); + rho->setRange(0.,30.); + nvtx->setRange(0.,50.); + + //Set Binning + hoveretower->setBins(50.); + + //Define Canvas properties + Double_t canvas_width(1300); + Double_t canvas_height(800); + +//create canvas for ecor (corrected energy) + + Double_t plotEMin(0.9), plotEMax(1.1); + gStyle->SetOptStat(0); + + + TCanvas *canvas_ecor = new TCanvas("corrected_energy","ecor",canvas_width,canvas_height); + + canvas_ecor->Divide(3,3); + + canvas_ecor->cd(1); + plot_Profile(hdata, dobarrel,scetavar,ecorvar, rawvar,"eta", "energy/generated_energy",plotEMin, plotEMax,-1.5, 1.5); + + canvas_ecor->cd(2); + plot_Profile(hdata, dobarrel,scphi,ecorvar, rawvar,"phi", "energy/generated_energy",plotEMin, plotEMax,-2., 2.); + + canvas_ecor->cd(3); + plot_Profile(hdata, dobarrel,r9,ecorvar, rawvar,"R9", "energy/generated_energy",plotEMin, plotEMax,0.7,1.); + + canvas_ecor->cd(4); + plot_Profile(hdata, dobarrel,scetawidth,ecorvar, rawvar,"scEtaWidth", "energy/generated_energy",plotEMin, plotEMax,0.005,0.014); + + canvas_ecor->cd(5); + plot_Profile(hdata, dobarrel,scphiwidth,ecorvar, rawvar,"scPhiWidth", "energy/generated_energy",plotEMin, plotEMax,0.,0.12); + + canvas_ecor->cd(6); + if(dobarrel) + plot_Profile(hdata, dobarrel,pt,ecorvar, rawvar,"Pt", "energy/generated_energy",plotEMin, plotEMax,0.,5000); + else + plot_Profile(hdata, dobarrel,pt,ecorvar, rawvar,"Pt", "energy/generated_energy",plotEMin, plotEMax,0.,2500); + canvas_ecor->cd(7); + plot_Profile(hdata, dobarrel,hoveretower,ecorvar, rawvar,"hoveretower", "energy/generated_energy",0.7, plotEMax,0.,0.16); + + canvas_ecor->cd(8); + plot_Profile(hdata, dobarrel,rho,ecorvar, rawvar,"rho", "energy/generated_energy",plotEMin, plotEMax,0.,30); + + canvas_ecor->cd(9); + plot_Profile(hdata, dobarrel,nvtx,ecorvar, rawvar,"number of vertices", "energy/generated_energy",plotEMin, plotEMax,0.,40); + + //save canvas_ecor + canvas_ecor->SaveAs("corrected_energy"+add2); + canvas_ecor->SaveAs("corrected_energy"+addroot); + /* + TCanvas *canvas_ecor2 = new TCanvas("corrected_energy2","ecor2",650,400); + plot_Profile(hdata, dobarrel,hoveretower,ecorvar, rawvar,"hoveretower", "energy/generated_energy",0.5, 1.2,0.,0.16); + canvas_ecor2->SaveAs("corrected_energy2"+add2); + canvas_ecor2->SaveAs("corrected_energy2"+addroot);*/ + + +//create canvas for mean_of_gaussian + +/* TObjArray* Arr = new TObjArray(); + TCanvas *canvas_ecor_fit = new TCanvas("ecor_fit","ecor_fit",canvas_width,canvas_height); + canvas_ecor_fit->Divide(3,3); + + canvas_ecor_fit->cd(1); + plot_Slices(hdata,dobarrel,Arr,scetavar,ecorvar, rawvar,"hdata_hist_00000012_1","hdata_hist_00000012_chi2","eta","energy/generated_energy",plotEMin, plotEMax,-1.5,1.5); + canvas_ecor_fit->cd(2); + plot_Slices(hdata,dobarrel,Arr,scphi,ecorvar, rawvar,"hdata_hist_00000014_1","hdata_hist_00000014_chi2","phi","energy/generated_energy",plotEMin, plotEMax,-2,2); + canvas_ecor_fit->cd(3); + plot_Slices(hdata,dobarrel,Arr,r9,ecorvar, rawvar,"hdata_hist_00000016_1","hdata_hist_00000016_chi2","R9","energy/generated_energy",plotEMin, plotEMax,0.7,1); + canvas_ecor_fit->cd(4); + plot_Slices(hdata,dobarrel,Arr,scetawidth,ecorvar, rawvar,"hdata_hist_00000018_1","hdata_hist_00000018_chi2","scEtaWidth","energy/generated_energy",plotEMin, plotEMax,0.005,0.014,0.004,0.04); + canvas_ecor_fit->cd(5); + plot_Slices(hdata,dobarrel,Arr,scphiwidth,ecorvar, rawvar,"hdata_hist_0000001a_1","hdata_hist_0000001a_chi2","scPhiWidth","energy/generated_energy",plotEMin, plotEMax,0.,0.12,0.,0.12); + canvas_ecor_fit->cd(6); + plot_Slices(hdata,dobarrel,Arr,pt,ecorvar, rawvar,"hdata_hist_0000001c_1","hdata_hist_0000001c_chi2","Pt","energy/generated_energy",plotEMin, plotEMax,0.,5000,0.,5000); + canvas_ecor_fit->cd(7); + plot_Slices(hdata,dobarrel,Arr,hoveretower,ecorvar, rawvar,"hdata_hist_0000001e_1","hdata_hist_0000001e_chi2","hoveretower","energy/generated_energy",0.7, plotEMax,0.,0.16,0.,0.16); + canvas_ecor_fit->cd(8); + plot_Slices(hdata,dobarrel,Arr,rho,ecorvar, rawvar,"hdata_hist_00000020_1","hdata_hist_00000020_chi2","rho","energy/generated_energy",plotEMin, plotEMax,0.,30,0.,30); + canvas_ecor_fit->cd(9); + plot_Slices(hdata,dobarrel,Arr,nvtx,ecorvar, rawvar,"hdata_hist_00000022_1","hdata_hist_00000022_chi2","numberOfVertices","energy/generated_energy",plotEMin, plotEMax,0.,40,0.,40); + + +//save canvas_rawvar + canvas_ecor_fit->SaveAs("mean_of_gaussian_energy"+add2); + canvas_ecor_fit->SaveAs("mean_of_gaussian"+addroot); +*//* +//create canvas for mean (#mu) + Double_t plotMeanMin(0.9), plotMeanMax(1.1); + + TCanvas *canvas_sigmean = new TCanvas("signal_mean","sigmean",canvas_width,canvas_height); + gPad->SetGridx(); + gPad->SetGridy(); + canvas_sigmean->Divide(3,3); + canvas_sigmean->cd(1); + plot_Mean(hdata,dobarrel,scetavar,sigmean, "eta", "Mu",plotMeanMin, plotMeanMax,-1.5, 1.5); + canvas_sigmean->cd(2); + plot_Mean(hdata,dobarrel,scphi,sigmean, "phi", "Mu",plotMeanMin, plotMeanMax,-2,2); + canvas_sigmean->cd(3); + plot_Mean(hdata,dobarrel,r9,sigmean, "R9", "Mu",plotMeanMin, plotMeanMax,0.7,1); + canvas_sigmean->cd(4); + plot_Mean(hdata,dobarrel,scetawidth,sigmean,"scEtaWidth", "Mu",plotMeanMin, plotMeanMax,0.005,0.014); + canvas_sigmean->cd(5); + plot_Mean(hdata,dobarrel,scphiwidth,sigmean, "scPhiWidth", "Mu",plotMeanMin, plotMeanMax,0.,0.12); + canvas_sigmean->cd(6); + plot_Mean(hdata,dobarrel,pt,sigmean, "pt", "Mu",plotMeanMin, plotMeanMax,0., 5000); + canvas_sigmean->cd(7); + plot_Mean(hdata,dobarrel,hoveretower,sigmean, "hoveretower", "Mu",plotMeanMin, 1.5,0.,0.16); + canvas_sigmean->cd(8); + plot_Mean(hdata,dobarrel,rho,sigmean, "rho", "Mu",plotMeanMin, plotMeanMax,0.,30.); + canvas_sigmean->cd(9); + plot_Mean(hdata,dobarrel,nvtx,sigmean, "nvtx", "Mu",plotMeanMin, plotMeanMax,0.,40.); + + +//save canvas_sigmean + canvas_sigmean->SaveAs("signal_mean"+add2); + canvas_sigmean->SaveAs("signal_mean"+addroot);*/ +} + +Double_t effSigma(TH1 * hist) +{ + + TAxis *xaxis = hist->GetXaxis(); + Int_t nb = xaxis->GetNbins(); + if(nb < 10) + { + cout << "effsigma: Not a valid histo. nbins = " << nb << endl; + return 0.; + } + + Double_t bwid = xaxis->GetBinWidth(1); + if(bwid == 0) + { + cout << "effsigma: Not a valid histo. bwid = " << bwid << endl; + return 0.; + } + Double_t xmax = xaxis->GetXmax(); + Double_t xmin = xaxis->GetXmin(); + Double_t ave = hist->GetMean(); + Double_t rms = hist->GetRMS(); + + Double_t total=0.; + for(Int_t i=0; iGetBinContent(i); + } +// if(total < 100.) { +// cout << "effsigma: Too few entries " << total << endl; +// return 0.; +// } + Int_t ierr=0; + Int_t ismin=999; + + Double_t rlim=0.683*total; + Int_t nrms=rms/(bwid); // Set scan size to +/- rms + if(nrms > nb/10) nrms=nb/10; // Could be tuned... + + Double_t widmin=9999999.; + for(Int_t iscan=-nrms;iscanGetBinContent(ibm); + total=bin; + for(Int_t j=1;jGetBinContent(jbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + if(kbm > 0) + { + kbm--; + xk-=bwid; + bin=hist->GetBinContent(kbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + } + Double_t dxf=(total-rlim)*bwid/bin; + Double_t wid=(xj-xk+bwid-dxf)*0.5; + if(wid < widmin) + { + widmin=wid; + ismin=iscan; + } + } + if(ismin == nrms || ismin == -nrms) ierr=3; + if(ierr != 0) cout << "effsigma: Error of type " << ierr << endl; + + return widmin; + +} + +void plot_Profile(RooDataSet* hdata,bool dobarrel,RooRealVar *xvar,RooRealVar *ecorvar, RooRealVar *rawvar,TString xLabel, TString yLabel,Double_t plotEMin, Double_t plotEMax,Double_t plotXMin_barrel, Double_t plotXMax_barrel) { + gPad->SetGridx(); + gPad->SetGridy(); + TH2* histo2D_ecor = hdata->createHistogram(*xvar,*ecorvar); + TH2* histo2D_raw = hdata->createHistogram(*xvar,*rawvar); + TProfile *hprof_ecor = histo2D_ecor->ProfileX(); + TProfile *hprof_raw = histo2D_raw->ProfileX(); + + hprof_ecor->SetErrorOption("s"); + hprof_raw->SetErrorOption("s"); + + hprof_raw->GetYaxis()->SetRangeUser(plotEMin,plotEMax); + if(dobarrel) + hprof_raw->GetXaxis()->SetRangeUser(plotXMin_barrel,plotXMax_barrel); + + hprof_raw->GetXaxis()->SetTitle(xLabel); + hprof_raw->GetYaxis()->SetTitle(yLabel); + hprof_ecor->SetMarkerStyle(7); + hprof_ecor->SetMarkerColor(kBlue); + hprof_raw->SetMarkerColor(kRed); + hprof_raw->SetMarkerStyle(7); + hprof_raw->SetFillColor(kMagenta); + hprof_raw->SetFillStyle(3003); + hprof_raw->Draw("E3"); + hprof_raw->Draw("hist same p"); + hprof_ecor->Draw("same"); +} + +void plot_Slices(RooDataSet* hdata,bool dobarrel,TObjArray *Arr,RooRealVar *xvar,RooRealVar *ecorvar, RooRealVar *rawvar, TString name_of_hist_mean,TString name_of_hist_chi2,TString xLabel, TString yLabel,Double_t plotEMin, Double_t plotEMax,Double_t plotXMin, Double_t plotXMax, Double_t plotXMin_endcap, Double_t plotXMax_endcap) { + gPad->SetGridx(); + gPad->SetGridy(); + TH2* h2_ecor = hdata->createHistogram(*xvar,*ecorvar); + Double_t m1(0.98), m2(1.02); + TString option_fit="RG5"; + TF1 *func_gaus = new TF1("func_gaus","gaus(0)",m1,m2); + func_gaus->SetParameters(1,1,1); + func_gaus->SetRange(m1,m2); + h2_ecor->FitSlicesY(func_gaus,0,-1,0,option_fit,Arr); + //h2_ecor->FitSlicesY(0,0,-1,0,"G5Q",Arr); + //Arr->Print(); + TH1D *h2_ecor_1 = (TH1D*)gDirectory->Get(name_of_hist_mean); + h2_ecor_1->SetMarkerStyle(7); + h2_ecor_1->SetMarkerColor(kBlue); + + TH1D *h2_ecor_chi2 = (TH1D*)gDirectory->Get(name_of_hist_chi2); + h2_ecor_chi2->SetMarkerStyle(7); + h2_ecor_chi2->SetMarkerColor(kGreen); + + TH2* histo2D_ecor = hdata->createHistogram(*xvar,*ecorvar); + TProfile *hprof_ecor = histo2D_ecor->ProfileX(); + hprof_ecor->GetYaxis()->SetRangeUser(plotEMin,plotEMax); + if(dobarrel) + hprof_ecor->GetXaxis()->SetRangeUser(plotXMin,plotXMax); + else if(!dobarrel && plotXMin_endcap!=0 && plotXMin_endcap!=0) + hprof_ecor->GetXaxis()->SetRangeUser(plotXMin_endcap,plotXMax_endcap); + hprof_ecor->GetXaxis()->SetTitle(xLabel); + hprof_ecor->GetYaxis()->SetTitle(yLabel); + hprof_ecor->SetMarkerStyle(7); + hprof_ecor->SetMarkerColor(kRed); + hprof_ecor->SetFillColor(kMagenta); + hprof_ecor->SetFillStyle(3003); + hprof_ecor->Draw("E3"); + hprof_ecor->Draw("hist same p"); + h2_ecor_1->Draw("same"); + //h2_ecor_chi2->Draw("hist same p"); +} + +void plot_Mean(RooDataSet* hdata,bool dobarrel,RooRealVar *xvar,RooRealVar *sigmean, TString xLabel, TString yLabel,Double_t plotMeanMin, Double_t plotMeanMax,Double_t plotXMin_barrel, Double_t plotXMax_barrel) { + gPad->SetGridx(); + gPad->SetGridy(); + + TH2* histo2_sigmean = hdata->createHistogram(*xvar,*sigmean); + TProfile *hprof_sigmean_sceta = histo2_sigmean->ProfileX(); + hprof_sigmean_sceta->SetErrorOption("s"); + hprof_sigmean_sceta->GetYaxis()->SetRangeUser(plotMeanMin,plotMeanMax); + if(dobarrel) hprof_sigmean_sceta->GetXaxis()->SetRangeUser(plotXMin_barrel,plotXMax_barrel); + hprof_sigmean_sceta->GetXaxis()->SetTitle(xLabel); + hprof_sigmean_sceta->GetYaxis()->SetTitle(yLabel); + hprof_sigmean_sceta->Draw(); +} + + diff --git a/macros/examples/eregtraining.C b/macros/examples/eregtraining.C new file mode 100644 index 0000000..b363845 --- /dev/null +++ b/macros/examples/eregtraining.C @@ -0,0 +1,291 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "RooCBExp.h" +#include "RooCBFast.h" +#include "RooGaussianFast.h" + + +using namespace RooFit; + + +void eregtraining(bool dobarrel=true, bool doele=false) { + + //output directory + TString dirname = "ereg_sig3_Evts20_alpha36-07/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + //values param + Double_t minCutSig = 3., alpha1_const=3.6, alpha2_const=0.7; + /* + TCut prescale10 = "(event%10==0)"; + TCut prescale20 = "(event%20==0)"; + TCut prescale25 = "(event%25==0)"; + TCut prescale50 = "(event%50==0)"; + TCut prescale100 = "(event%100==0)"; + TCut prescale1000 = "(event%1000==0)"; + TCut evenevents = "(event%2==0)"; + TCut oddevents = "(event%2==1)"; + */ + TCut cutUsed = "(event%20==0)"; + //build vectors with list of input variables + std::vector *varsf = new std::vector; + varsf->push_back("scRawEnergy"); + varsf->push_back("scEta"); + varsf->push_back("scPhy"); + varsf->push_back("r9"); + varsf->push_back("etaWidth"); + varsf->push_back("phiWidth"); + varsf->push_back("scClustersSize"); + varsf->push_back("hadTowOverEm"); + varsf->push_back("rho"); + varsf->push_back("nvtx"); + + varsf->push_back("eta-scEta"); + varsf->push_back("atan2(sin(phi-scPhy),cos(phi-scPhy))"); + varsf->push_back("scSeedEnergy/scRawEnergy"); + + varsf->push_back("e3x3/e5x5"); + varsf->push_back("sigmaIetaIeta"); + varsf->push_back("sigmaIphiIphi"); + varsf->push_back("covarianceIetaIphi"); + varsf->push_back("eMax/e5x5"); + varsf->push_back("e2nd/e5x5"); + varsf->push_back("eTop/e5x5"); + varsf->push_back("eBottom/e5x5"); + varsf->push_back("eLeft/e5x5"); + varsf->push_back("eRight/e5x5"); + varsf->push_back("e2x5Max/e5x5"); + varsf->push_back("e2x5Top/e5x5"); + varsf->push_back("e2x5Bottom/e5x5"); + varsf->push_back("e2x5Left/e5x5"); + varsf->push_back("e2x5Right/e5x5"); + + std::vector *varseb = new std::vector(*varsf); + std::vector *varsee = new std::vector(*varsf); + + varseb->push_back("e5x5/scSeedEnergy"); + + varseb->push_back("iEta"); + varseb->push_back("iPhi"); + varseb->push_back("(iEta-1*abs(iEta)/iEta)%5"); + varseb->push_back("(iPhi-1)%2"); + varseb->push_back("(abs(iEta)<=25)*((iEta-1*abs(iEta)/iEta)%25) + (abs(iEta)>25)*((iEta-26*abs(iEta)/iEta)%20)"); + varseb->push_back("(iPhi-1)%20"); + varseb->push_back("cryEta"); + varseb->push_back("cryPhi"); + + varsee->push_back("scPreshowerEnergy/scRawEnergy"); + + //select appropriate input list for barrel or endcap + std::vector *varslist; + if (dobarrel) varslist = varseb; + else varslist = varsee; + + //create RooRealVars for each input variable + RooArgList vars; + for (unsigned int ivar=0; ivarsize(); ++ivar) + { + RooRealVar *var = new RooRealVar(TString::Format("var_%i",ivar),varslist->at(ivar).c_str(),0.); + vars.addOwned(*var); + } + + //make list of input variable RooRealVars + RooArgList condvars(vars); + + //create RooRealVar for target + RooRealVar *tgtvar = new RooRealVar("tgtvar","etrue/scRawEnergy",1.); + if (!dobarrel) tgtvar->SetTitle("etrue/(scRawEnergy + scPreshowerEnergy)"); + + //add target to full list + vars.addOwned(*tgtvar); + + //RooRealVar for event weight + RooRealVar weightvar("weightvar","",1.); + + + TChain *tree; + + + if (doele) + { + tree = new TChain(""); + tree->Add(""); + } + else + { + tree = new TChain("promptTree"); + tree->Add("/afs/cern.ch/user/m/musella/public/forKenza/gam_gam_phys14_v5_regtraining_v3.root"); + } + + //training selection cut + TCut selcut; + if (dobarrel) + { + selcut = "pt>200. && abs(scEta)<=1.5";// && kSaturated[12]!=1" ; // && etrue/scRawEnergy <=2. && etrue/scRawEnergy>=0.6"; + } + else + { + selcut = "pt>200. && abs(scEta)>1.5";// && kSaturated[12]!=1" ; // && etrue/scRawEnergy <=2. && etrue/scRawEnergy>=0.6" ; + } + + + + //TCut selweight = "(weight)"; + TCut selweight = "(1)"; + TCut prescale10 = "(event%10==0)"; + TCut prescale20 = "(event%20==0)"; + TCut prescale25 = "(event%25==0)"; + TCut prescale50 = "(event%50==0)"; + TCut prescale100 = "(event%100==0)"; + TCut prescale1000 = "(event%1000==0)"; + TCut evenevents = "(event%2==0)"; + TCut oddevents = "(event%2==1)"; + + + //weightvar title used for per-event weights and selection cuts + if (doele) { + weightvar.SetTitle(prescale100*evenevents*selcut); + } + else { + weightvar.SetTitle(cutUsed*selweight*selcut); + } + //create RooDataSet from TChain + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",tree,vars,weightvar); + + + //RooRealVars corresponding to regressed parameters (sigma, mean, left tail parameter, right tail parameter) + RooRealVar sigwidthtvar("sigwidthtvar","",0.01); + sigwidthtvar.setConstant(false); + + RooRealVar sigmeantvar("sigmeantvar","",1.); + sigmeantvar.setConstant(false); + + RooRealVar sign1var("sign1var","",3.); + sign1var.setConstant(false); + + RooRealVar sign2var("sign2var","",3.); + sign2var.setConstant(false); + + //define non-parametric functions for each regressed parameter + RooGBRFunctionFlex *sigwidthtfunc = new RooGBRFunctionFlex("sigwidthtfunc",""); + RooGBRFunctionFlex *sigmeantfunc = new RooGBRFunctionFlex("sigmeantfunc",""); + RooGBRFunctionFlex *sign1func = new RooGBRFunctionFlex("sign1func",""); + RooGBRFunctionFlex *sign2func = new RooGBRFunctionFlex("sign2func",""); + + //define mapping of input variables to non-parametric functions (in this case trivial since all 4 functions depend on the same inputs, but this is not a requirement) + RooGBRTargetFlex *sigwidtht = new RooGBRTargetFlex("sigwidtht","",*sigwidthtfunc,sigwidthtvar,condvars); + RooGBRTargetFlex *sigmeant = new RooGBRTargetFlex("sigmeant","",*sigmeantfunc,sigmeantvar,condvars); + RooGBRTargetFlex *sign1t = new RooGBRTargetFlex("sign1t","",*sign1func,sign1var,condvars); + RooGBRTargetFlex *sign2t = new RooGBRTargetFlex("sign2t","",*sign2func,sign2var,condvars); + + //define list of mapped functions to regress + RooArgList tgts; + tgts.add(*sigwidtht); + tgts.add(*sigmeant); + tgts.add(*sign1t); + tgts.add(*sign2t); + + //define transformations corresponding to parameter bounds for non-parametric outputs + RooRealConstraint sigwidthlim("sigwidthlim","",*sigwidtht,0.0002,0.5); + RooRealConstraint sigmeanlim("sigmeanlim","",*sigmeant,0.2,2.0); + RooRealConstraint sign1lim("sign1lim","",*sign1t,0.01,100.); + RooRealConstraint sign2lim("sign2lim","",*sign2t,1.01,100.); + + //define pdf, which depends on transformed outputs (and is intended to be treated as a conditional pdf over the + //regression inputs in this case) + //The actual pdf below is a double crystal ball, with crossover points alpha_1 and alpha_2 set constant, but all other + //parameters regressed + RooDoubleCBFast sigpdf("sigpdf","",*tgtvar,sigmeanlim,sigwidthlim,RooConst(alpha1_const),sign1lim,RooConst(alpha2_const),sign2lim); + + //dummy variable + RooConstVar etermconst("etermconst","",0.); + + //dummy variable + RooRealVar r("r","",1.); + r.setConstant(); + + //define list of pdfs + std::vector vpdf; + vpdf.push_back(&sigpdf); + + //define list of training datasets + std::vector vdata; + vdata.push_back(hdata); + + //define minimum event weight per tree node + double minweight = 200; + std::vector minweights; + minweights.push_back(minweight); + + //temp output file + TFile *fres = new TFile("fres.root","RECREATE"); + + //run training + if (1) + { + RooHybridBDTAutoPdf bdtpdfdiff("bdtpdfdiff","",tgts,etermconst,r,vdata,vpdf); + bdtpdfdiff.SetMinCutSignificance(minCutSig); + //bdtpdfdiff.SetPrescaleInit(100); + bdtpdfdiff.SetShrinkage(0.1); + bdtpdfdiff.SetMinWeights(minweights); + bdtpdfdiff.SetMaxNodes(750); + bdtpdfdiff.TrainForest(1e6); + } + + //create workspace and output to file + RooWorkspace *wereg = new RooWorkspace("wereg"); + wereg->import(sigpdf); + + if (doele && dobarrel) + wereg->writeToFile("wereg_ele_eb.root"); + else if (doele && !dobarrel) + wereg->writeToFile("wereg_ele_ee.root"); + else if (!doele && dobarrel) + wereg->writeToFile("wereg_ph_eb.root"); + else if (!doele && !dobarrel) + wereg->writeToFile("wereg_ph_ee.root"); + + return; + + +} diff --git a/macros/examples/eregtrainingFAlpha_Log.C b/macros/examples/eregtrainingFAlpha_Log.C new file mode 100644 index 0000000..043925c --- /dev/null +++ b/macros/examples/eregtrainingFAlpha_Log.C @@ -0,0 +1,310 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "RooCBExp.h" +#include "RooCBFast.h" +#include "RooGaussianFast.h" +#include "RooGausDoubleExp.h" +//#include "RooHybridTailsGaus.h" + + +using namespace RooFit; + + +void eregtrainingFAlpha_Log(bool dobarrel=true,Double_t minCutSig = 3, Double_t nmax=500, bool doele=false) { + + //values param + Double_t n1max=nmax, n2max=nmax; + + //values param + TString minCutSigS(TString::Format("%g",minCutSig)); + TString nmaxS(TString::Format("%g",nmax)); + TString cutEvtsS(TString::Format("%d",15)); + + TString dirname; + TCut cutUsed = "(event%15 ==0)"; + //output directory + if (dobarrel) + dirname = "Barrel_Log_sig"+minCutSigS+"_FAlpha_"+"_evts"+cutEvtsS+"/"; + else + dirname = "Endcap_Log_sig"+minCutSigS+"_FAlpha"+"_evts"+cutEvtsS+"/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + //build vectors with list of input variables + std::vector *varsf = new std::vector; + varsf->push_back("scRawEnergy"); + varsf->push_back("scEta"); + varsf->push_back("scPhy"); + varsf->push_back("r9"); + varsf->push_back("etaWidth"); + varsf->push_back("phiWidth"); + varsf->push_back("scClustersSize"); + varsf->push_back("hadTowOverEm"); + varsf->push_back("rho"); + varsf->push_back("nvtx"); + + varsf->push_back("eta-scEta"); + varsf->push_back("atan2(sin(phi-scPhy),cos(phi-scPhy))"); + varsf->push_back("scSeedEnergy/scRawEnergy"); + + varsf->push_back("e3x3/e5x5"); + varsf->push_back("sigmaIetaIeta"); + varsf->push_back("sigmaIphiIphi"); + varsf->push_back("covarianceIetaIphi"); + varsf->push_back("eMax/e5x5"); + varsf->push_back("e2nd/e5x5"); + varsf->push_back("eTop/e5x5"); + varsf->push_back("eBottom/e5x5"); + varsf->push_back("eLeft/e5x5"); + varsf->push_back("eRight/e5x5"); + varsf->push_back("e2x5Max/e5x5"); + varsf->push_back("e2x5Top/e5x5"); + varsf->push_back("e2x5Bottom/e5x5"); + varsf->push_back("e2x5Left/e5x5"); + varsf->push_back("e2x5Right/e5x5"); + + std::vector *varseb = new std::vector(*varsf); + std::vector *varsee = new std::vector(*varsf); + + varseb->push_back("e5x5/scSeedEnergy"); + + varseb->push_back("iEta"); + varseb->push_back("iPhi"); + varseb->push_back("(iEta-1*abs(iEta)/iEta)%5"); + varseb->push_back("(iPhi-1)%2"); + varseb->push_back("(abs(iEta)<=25)*((iEta-1*abs(iEta)/iEta)%25) + (abs(iEta)>25)*((iEta-26*abs(iEta)/iEta)%20)"); + varseb->push_back("(iPhi-1)%20"); + varseb->push_back("cryEta"); + varseb->push_back("cryPhi"); + + varsee->push_back("scPreshowerEnergy/scRawEnergy"); //28 + + //select appropriate input list for barrel or endcap + std::vector *varslist; + if (dobarrel) varslist = varseb; + else varslist = varsee; + + //create RooRealVars for each input variable + RooArgList vars; + for (unsigned int ivar=0; ivarsize(); ++ivar) + { + RooRealVar *var = new RooRealVar(TString::Format("var_%i",ivar),varslist->at(ivar).c_str(),0.); + vars.addOwned(*var); + } + + //make list of input variable RooRealVars + RooArgList condvars(vars); + + //create RooRealVar for target + RooRealVar *tgtvar = new RooRealVar("tgtvar","log(etrue/scRawEnergy)",1.); + if (!dobarrel) tgtvar->SetTitle("log(etrue/(scRawEnergy + scPreshowerEnergy))"); + + //add target to full list + vars.addOwned(*tgtvar); + + //RooRealVar for event weight + RooRealVar weightvar("weightvar","",1.); + + TChain *tree; + + //if (doele) + //{ + //tree = new TChain(""); + //tree->Add(""); + //} + // else + //{ + tree = new TChain("promptTree"); + tree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-300To3000.root"); + tree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-5To300_lessstat.root"); + + //} + + //training selection cut + TCut selcut; + if (dobarrel) + { + selcut = "etrue*pt/energy >=200. && etrue*pt/energy<=3000 && abs(scEta)<1.5 && kSaturated[12]!=1 "; + } + else + { + selcut = "etrue*pt/energy >=200. && etrue*pt/energy<=3000 && abs(scEta)>1.5 && kSaturated[12]!=1 " ; + } + + + //TCut selweight = "(weight)"; + TCut selweight = "(1)"; + TCut prescale10 = "(event%10==0)"; + TCut prescale20 = "(event%20==0)"; + TCut prescale25 = "(event%25==0)"; + TCut prescale50 = "(event%50==0)"; + TCut prescale100 = "(event%100==0)"; + TCut prescale1000 = "(event%1000==0)"; + TCut evenevents = "(event%2==0)"; + TCut oddevents = "(event%2==1)"; + + + //weightvar title used for per-event weights and selection cuts + if (doele) { + weightvar.SetTitle(prescale100*evenevents*selcut); + } + else { + weightvar.SetTitle(cutUsed*selweight*selcut); + } + //create RooDataSet from TChain + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",tree,vars,weightvar); + + + //RooRealVars corresponding to regressed parameters (sigma, mean, left tail parameter, right tail parameter) + RooRealVar sigwidthtvar("sigwidthtvar","",0.002); + sigwidthtvar.setConstant(false); + + RooRealVar sigmeantvar("sigmeantvar","",0.); + sigmeantvar.setConstant(false); + + RooRealVar siga1var("siga1var","",1.); + siga1var.setConstant(false); + + RooRealVar sign1var("sign1var","",3.); + sign1var.setConstant(false); + + RooRealVar siga2var("siga2var","",1.); + siga2var.setConstant(false); + + RooRealVar sign2var("sign2var","",3.); + sign2var.setConstant(false); + + //define non-parametric functions for each regressed parameter + RooGBRFunctionFlex *sigwidthtfunc = new RooGBRFunctionFlex("sigwidthtfunc",""); + RooGBRFunctionFlex *sigmeantfunc = new RooGBRFunctionFlex("sigmeantfunc",""); + RooGBRFunctionFlex *siga1func = new RooGBRFunctionFlex("siga1func",""); + RooGBRFunctionFlex *sign1func = new RooGBRFunctionFlex("sign1func",""); + RooGBRFunctionFlex *siga2func = new RooGBRFunctionFlex("siga2func",""); + RooGBRFunctionFlex *sign2func = new RooGBRFunctionFlex("sign2func",""); + + //define mapping of input variables to non-parametric functions (in this case trivial since all 4 functions depend on the same inputs, but this is not a requirement) + RooGBRTargetFlex *sigwidtht = new RooGBRTargetFlex("sigwidtht","",*sigwidthtfunc,sigwidthtvar,condvars); + RooGBRTargetFlex *sigmeant = new RooGBRTargetFlex("sigmeant","",*sigmeantfunc,sigmeantvar,condvars); + RooGBRTargetFlex *siga1t = new RooGBRTargetFlex("siga1t","",*siga1func,siga1var,condvars); + RooGBRTargetFlex *sign1t = new RooGBRTargetFlex("sign1t","",*sign1func,sign1var,condvars); + RooGBRTargetFlex *siga2t = new RooGBRTargetFlex("siga2t","",*siga2func,siga2var,condvars); + RooGBRTargetFlex *sign2t = new RooGBRTargetFlex("sign2t","",*sign2func,sign2var,condvars); + + //define list of mapped functions to regress + RooArgList tgts; + tgts.add(*sigwidtht); + tgts.add(*sigmeant); + tgts.add(*siga1t); + tgts.add(*sign1t); + tgts.add(*siga2t); + tgts.add(*sign2t); + + //define transformations corresponding to parameter bounds for non-parametric outputs + RooRealConstraint sigwidthlim("sigwidthlim","",*sigwidtht,0.0002,0.5); + RooRealConstraint sigmeanlim("sigmeanlim","",*sigmeant,-0.5,0.6); + RooRealConstraint siga1lim("siga1lim","",*siga1t,0.05,10.); + RooRealConstraint sign1lim("sign1lim","",*sign1t,1.01,n1max); + RooRealConstraint siga2lim("siga2lim","",*siga2t,0.05,10.); + RooRealConstraint sign2lim("sign2lim","",*sign2t,1.01,n2max); + + //define pdf, which depends on transformed outputs (and is intended to be treated as a conditional pdf over the + //regression inputs in this case) + //The actual pdf below is a double crystal ball, with crossover points alpha_1 and alpha_2 set constant, but all other + //parameters regressed + RooDoubleCBFast sigpdf("sigpdf","",*tgtvar,sigmeanlim,sigwidthlim,siga1lim,sign1lim,siga2lim,sign2lim); + //RooHybridTailsGaus sigpdf("sigpdf","",*tgtvar,sigmeanlim,sigwidthlim,siga1lim,siga2lim,sign2lim); + + //framex->Draw(); + //dummy variable + RooConstVar etermconst("etermconst","",0.); + + //dummy variable + RooRealVar r("r","",1.); + r.setConstant(); + + //define list of pdfs + std::vector vpdf; + vpdf.push_back(&sigpdf); + + //define list of training datasets + std::vector vdata; + vdata.push_back(hdata); + + //define minimum event weight per tree node + double minweight = 200; + std::vector minweights; + minweights.push_back(minweight); + + //temp output file + TFile *fres = new TFile("fres.root","RECREATE"); + + //run training + if (1) + { + RooHybridBDTAutoPdf bdtpdfdiff("bdtpdfdiff","",tgts,etermconst,r,vdata,vpdf); + bdtpdfdiff.SetMinCutSignificance(minCutSig); + //bdtpdfdiff.SetPrescaleInit(100); + bdtpdfdiff.SetShrinkage(0.1); + bdtpdfdiff.SetMinWeights(minweights); + bdtpdfdiff.SetMaxNodes(750); //750 + bdtpdfdiff.TrainForest(1e6); + } + + //create workspace and output to file + RooWorkspace *wereg = new RooWorkspace("wereg"); + wereg->import(sigpdf); + + if (doele && dobarrel) + wereg->writeToFile("wereg_ele_eb.root"); + else if (doele && !dobarrel) + wereg->writeToFile("wereg_ele_ee.root"); + else if (!doele && dobarrel) + wereg->writeToFile("wereg_ph_eb.root"); + else if (!doele && !dobarrel) + wereg->writeToFile("wereg_ph_ee.root"); + + delete hdata; + + return; + + +} diff --git a/macros/examples/eregtrainingLog.C b/macros/examples/eregtrainingLog.C new file mode 100644 index 0000000..fec891c --- /dev/null +++ b/macros/examples/eregtrainingLog.C @@ -0,0 +1,298 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "RooCBExp.h" +#include "RooCBFast.h" +#include "RooGaussianFast.h" + + +using namespace RooFit; + + +void eregtrainingLog(bool dobarrel=true,Double_t minCutSig = 3,Double_t alpha1Const=2,Double_t alpha2Const=3, Double_t nmax=500, bool doele=false) { + + //values param + TString minCutSigS(TString::Format("%g",minCutSig)); + TString alpha1ConstS(TString::Format("%g",alpha1Const)); + TString alpha2ConstS(TString::Format("%g",alpha2Const)); + TString nmaxS(TString::Format("%g",nmax)); + TString cutEvtsS(TString::Format("%d",15)); + + TString dirname; + TCut cutUsed = "(event%15 ==0)"; + + //output directory + if (dobarrel) + dirname = "Barrel_Log_sig"+minCutSigS+"_alpha"+alpha1ConstS+"-"+alpha2ConstS+"_evts"+cutEvtsS+"_pileup/"; + else + dirname = "Endcap_Log_sig"+minCutSigS+"_alpha"+alpha1ConstS+"-"+alpha2ConstS+"_evts"+cutEvtsS+"_pileup/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + + + //build vectors with list of input variables + std::vector *varsf = new std::vector; + varsf->push_back("scRawEnergy"); + varsf->push_back("scEta"); + varsf->push_back("scPhy"); + varsf->push_back("r9"); + varsf->push_back("etaWidth"); + varsf->push_back("phiWidth"); + varsf->push_back("scClustersSize"); + varsf->push_back("hadTowOverEm"); + varsf->push_back("rho"); + varsf->push_back("nvtx"); + // + varsf->push_back("eta-scEta"); + varsf->push_back("atan2(sin(phi-scPhy),cos(phi-scPhy))"); + varsf->push_back("scSeedEnergy/scRawEnergy"); + // + varsf->push_back("full5x5_e3x3/full5x5_e5x5"); + varsf->push_back("sigmaIetaIeta"); + varsf->push_back("sigmaIphiIphi"); + varsf->push_back("covarianceIetaIphi"); + varsf->push_back("eMax/e5x5"); + varsf->push_back("e2nd/e5x5"); + varsf->push_back("eTop/e5x5"); + varsf->push_back("eBottom/e5x5"); + varsf->push_back("eLeft/e5x5"); + varsf->push_back("eRight/e5x5"); + varsf->push_back("e2x5Max/e5x5"); + varsf->push_back("e2x5Top/e5x5"); + varsf->push_back("e2x5Bottom/e5x5"); + varsf->push_back("e2x5Left/e5x5"); + varsf->push_back("e2x5Right/e5x5"); + + std::vector *varseb = new std::vector(*varsf); + std::vector *varsee = new std::vector(*varsf); + + varseb->push_back("full5x5_e5x5/scSeedEnergy"); + // + varseb->push_back("iEta"); + varseb->push_back("iPhi"); + varseb->push_back("(iEta-1*abs(iEta)/iEta)%5"); + varseb->push_back("(iPhi-1)%2"); + varseb->push_back("(abs(iEta)<=25)*((iEta-1*abs(iEta)/iEta)%25) + (abs(iEta)>25)*((iEta-26*abs(iEta)/iEta)%20)"); + varseb->push_back("(iPhi-1)%20"); + varseb->push_back("cryEta"); + varseb->push_back("cryPhi"); + + varsee->push_back("scPreshowerEnergy/scRawEnergy"); //28 + + //select appropriate input list for barrel or endcap + std::vector *varslist; + if (dobarrel) varslist = varseb; + else varslist = varsee; + + //create RooRealVars for each input variable + RooArgList vars; + for (unsigned int ivar=0; ivarsize(); ++ivar) + { + RooRealVar *var = new RooRealVar(TString::Format("var_%i",ivar),varslist->at(ivar).c_str(),0.); + vars.addOwned(*var); + } + + //make list of input variable RooRealVars + RooArgList condvars(vars); + + //create RooRealVar for target + RooRealVar *tgtvar = new RooRealVar("tgtvar","log(etrue/scRawEnergy)",1.); + if (!dobarrel) tgtvar->SetTitle("log(etrue/(scRawEnergy + scPreshowerEnergy))"); + + //add target to full list + vars.addOwned(*tgtvar); + + //RooRealVar for event weight + RooRealVar weightvar("weightvar","",1.); + + TChain *tree; + + //if (doele) + //{ + //tree = new TChain(""); + //tree->Add(""); + //} + // else + //{ + tree = new TChain("promptTree"); + tree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-300To3000.root"); + tree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-5To300_lessstat.root"); + + //} + + //training selection cut + TCut selcut; + if (dobarrel) + { + selcut = "etrue*pt/energy >=200. && etrue*pt/energy<=3000 && abs(scEta)<1.5 && kSaturated[12]!=1 && nvtx >= 1"; + } + else + { + selcut = "etrue*pt/energy >=200. && etrue*pt/energy<=3000 && abs(scEta)>1.5 && kSaturated[12]!=1 && nvtx >= 1" ; + } + + //TCut selweight = "(weight)"; + TCut selweight = "(1)"; + + + //weightvar title used for per-event weights and selection cuts + if (doele) { + weightvar.SetTitle(selcut); + } + else { + weightvar.SetTitle(cutUsed*selweight*selcut); + } + //create RooDataSet from TChain + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",tree,vars,weightvar); + + + //RooRealVars corresponding to regressed parameters (sigma, mean, left tail parameter, right tail parameter) + RooRealVar sigwidthtvar("sigwidthtvar","",0.002); + sigwidthtvar.setConstant(false); + + RooRealVar sigmeantvar("sigmeantvar","",0.); + sigmeantvar.setConstant(false); + + //RooRealVar siga1var("siga1var","",1.); + //siga1var.setConstant(false); + + RooRealVar sign1var("sign1var","",3.); + sign1var.setConstant(false); + + //RooRealVar siga2var("siga2var","",1.); + //siga2var.setConstant(false); + + RooRealVar sign2var("sign2var","",3.); + sign2var.setConstant(false); + + //define non-parametric functions for each regressed parameter + RooGBRFunctionFlex *sigwidthtfunc = new RooGBRFunctionFlex("sigwidthtfunc",""); + RooGBRFunctionFlex *sigmeantfunc = new RooGBRFunctionFlex("sigmeantfunc",""); + //RooGBRFunctionFlex *siga1func = new RooGBRFunctionFlex("siga1func",""); + RooGBRFunctionFlex *sign1func = new RooGBRFunctionFlex("sign1func",""); + //RooGBRFunctionFlex *siga2func = new RooGBRFunctionFlex("siga2func",""); + RooGBRFunctionFlex *sign2func = new RooGBRFunctionFlex("sign2func",""); + + //define mapping of input variables to non-parametric functions (in this case trivial since all 4 functions depend on the same inputs, but this is not a requirement) + RooGBRTargetFlex *sigwidtht = new RooGBRTargetFlex("sigwidtht","",*sigwidthtfunc,sigwidthtvar,condvars); + RooGBRTargetFlex *sigmeant = new RooGBRTargetFlex("sigmeant","",*sigmeantfunc,sigmeantvar,condvars); + //RooGBRTargetFlex *siga1t = new RooGBRTargetFlex("siga1t","",*siga1func,siga1var,condvars); + RooGBRTargetFlex *sign1t = new RooGBRTargetFlex("sign1t","",*sign1func,sign1var,condvars); + //RooGBRTargetFlex *siga2t = new RooGBRTargetFlex("siga2t","",*siga2func,siga2var,condvars); + RooGBRTargetFlex *sign2t = new RooGBRTargetFlex("sign2t","",*sign2func,sign2var,condvars); + + //define list of mapped functions to regress + RooArgList tgts; + tgts.add(*sigwidtht); + tgts.add(*sigmeant); + //tgts.add(*siga1t); + tgts.add(*sign1t); + //tgts.add(*siga2t); + tgts.add(*sign2t); + + //define transformations corresponding to parameter bounds for non-parametric outputs + RooRealConstraint sigwidthlim("sigwidthlim","",*sigwidtht,0.0002,0.5); + RooRealConstraint sigmeanlim("sigmeanlim","",*sigmeant,-0.5,0.6); + //RooRealConstraint siga1lim("siga1lim","",*siga1t,1,10.); + RooRealConstraint sign1lim("sign1lim","",*sign1t,1.01,nmax); + //RooRealConstraint siga2lim("siga2lim","",*siga2t,1,10.; + RooRealConstraint sign2lim("sign2lim","",*sign2t,1.01,nmax); + + //define pdf, which depends on transformed outputs (and is intended to be treated as a conditional pdf over the + //regression inputs in this case) + //The actual pdf below is a double crystal ball, with crossover points alpha_1 and alpha_2 set constant, but all other + //parameters regressed + RooDoubleCBFast sigpdf("sigpdf","",*tgtvar,sigmeanlim,sigwidthlim,RooConst(alpha1Const),sign1lim,RooConst(alpha2Const),sign2lim); + + //framex->Draw(); + //dummy variable + RooConstVar etermconst("etermconst","",0.); + + //dummy variable + RooRealVar r("r","",1.); + r.setConstant(); + + //define list of pdfs + std::vector vpdf; + vpdf.push_back(&sigpdf); + + //define list of training datasets + std::vector vdata; + vdata.push_back(hdata); + + //define minimum event weight per tree node + double minweight = 200; + std::vector minweights; + minweights.push_back(minweight); + + //temp output file + TFile *fres = new TFile("fres.root","RECREATE"); + + //run training + if (1) + { + RooHybridBDTAutoPdf bdtpdfdiff("bdtpdfdiff","",tgts,etermconst,r,vdata,vpdf); + bdtpdfdiff.SetMinCutSignificance(minCutSig); + //bdtpdfdiff.SetPrescaleInit(100); + bdtpdfdiff.SetShrinkage(0.1); + bdtpdfdiff.SetMinWeights(minweights); + bdtpdfdiff.SetMaxNodes(750); + bdtpdfdiff.TrainForest(1e6); + } + + //create workspace and output to file + RooWorkspace *wereg = new RooWorkspace("wereg"); + wereg->import(sigpdf); + + if (doele && dobarrel) + wereg->writeToFile("wereg_ele_eb.root"); + else if (doele && !dobarrel) + wereg->writeToFile("wereg_ele_ee.root"); + else if (!doele && dobarrel) + wereg->writeToFile("wereg_ph_eb.root"); + else if (!doele && !dobarrel) + wereg->writeToFile("wereg_ph_ee.root"); + + return; + + +} diff --git a/macros/examples/fitDataSet.C b/macros/examples/fitDataSet.C new file mode 100644 index 0000000..0eb9efa --- /dev/null +++ b/macros/examples/fitDataSet.C @@ -0,0 +1,309 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "RooCBExp.h" +#include "RooCBFast.h" +#include "RooGaussianFast.h" +#include "RooRevCBFast.h" +#include "RooGausDoubleExp.h" +#include "TStyle.h" +#include "Riostream.h" + +using namespace RooFit; + + +void fitDataSet(bool dobarrel=true, bool doele=false) { + + + //create RooRealVar for target + RooRealVar *tgtvar1 = new RooRealVar("tgtvar1","log(etrue/scRawEnergy)",1.); + if (!dobarrel) tgtvar1->SetTitle("log(etrue/(scRawEnergy + scPreshowerEnergy))"); + + RooRealVar *tgtvar2 = new RooRealVar("tgtvar2","log(etrue/scRawEnergy)",1.); + if (!dobarrel) tgtvar2->SetTitle("log(etrue/(scRawEnergy + scPreshowerEnergy))"); + + RooRealVar *tgtvar3 = new RooRealVar("tgtvar3","log(etrue/scRawEnergy)",1.); + if (!dobarrel) tgtvar3->SetTitle("log(etrue/(scRawEnergy + scPreshowerEnergy))"); + + RooRealVar *tgtvar4 = new RooRealVar("tgtvar4","log(etrue/scRawEnergy)",1.); + if (!dobarrel) tgtvar4->SetTitle("log(etrue/(scRawEnergy + scPreshowerEnergy))"); + + /* RooRealVar *tgtvar1 = new RooRealVar("tgtvar1","etrue/scRawEnergy",1.); + if (!dobarrel) tgtvar1->SetTitle("etrue/(scRawEnergy + scPreshowerEnergy)"); + + RooRealVar *tgtvar2 = new RooRealVar("tgtvar2","etrue/scRawEnergy",1.); + if (!dobarrel) tgtvar2->SetTitle("etrue/(scRawEnergy + scPreshowerEnergy)"); + + RooRealVar *tgtvar3 = new RooRealVar("tgtvar3","etrue/scRawEnergy",1.); + if (!dobarrel) tgtvar3->SetTitle("etrue/(scRawEnergy + scPreshowerEnergy)"); + + RooRealVar *tgtvar4 = new RooRealVar("tgtvar4","etrue/scRawEnergy",1.); + if (!dobarrel) tgtvar4->SetTitle("etrue/(scRawEnergy + scPreshowerEnergy)"); + */ + RooArgList vars1, vars2, vars3, vars4; + + //add target to full list + vars1.addOwned(*tgtvar1); + vars2.addOwned(*tgtvar2); + vars3.addOwned(*tgtvar3); + vars4.addOwned(*tgtvar4); + + //RooRealVar for event weight + RooRealVar weightvar_lelr("weightvar","",1.); + RooRealVar weightvar_lehr("weightvar","",1.); + RooRealVar weightvar_hehr("weightvar","",1.); + RooRealVar weightvar_helr("weightvar","",1.); + + TChain *tree; + tree = new TChain("promptTree"); + tree->Add("/afs/cern.ch/user/m/musella/public/forKenza/gam_gam_phys14_v5_regtraining_v3.root"); + + + TCut selcutLowEtaLowR9, selcutLowEtaHighR9, selcutHighEtaHighR9,selcutHighEtaLowR9; + if (dobarrel) + { + selcutLowEtaLowR9 = "pt>200. && abs(scEta)<1.5 && kSaturated[12]!=1 && r9 <0.94" ; + selcutLowEtaHighR9 = "pt>200. && abs(scEta)<1.5 && kSaturated[12]!=1 && r9 >=0.94" ; + selcutHighEtaHighR9 = "pt>200. && abs(scEta)<1.5 && kSaturated[12]!=1 && r9 >=0.94" ; + selcutHighEtaLowR9 = "pt>200. && abs(scEta)<1.5 && kSaturated[12]!=1 && r9 <0.94" ; + } + if(!dobarrel) + { + selcutLowEtaLowR9 = "pt>200. && abs(scEta)>1.5 && kSaturated[12]!=1 && abs(scEta)<=1.8 && abs(scEta)>=1.6 && r9 <0.94" ; + selcutLowEtaHighR9 = "pt>200. && abs(scEta)>1.5 && kSaturated[12]!=1 && abs(scEta)<=1.8 && abs(scEta)>=1.6 && r9 >=0.94" ; + selcutHighEtaHighR9 = "pt>200. && abs(scEta)>1.5 && kSaturated[12]!=1 && abs(scEta)<=2.3 && abs(scEta)>=2.1 && r9 >=0.94" ; + selcutHighEtaLowR9 = "pt>200. && abs(scEta)>1.5 && kSaturated[12]!=1";// && abs(scEta)<=2.3 && abs(scEta)>=2.1 && r9 <0.94" ; + + //selcutHighEtaLowR9 = "pt>200. && abs(scEta)>1.5 && kSaturated[12]!=1 && r9 <0.94" ; + //selcutHighEtaHighR9 = "pt>200. && abs(scEta)>1.5 && kSaturated[12]!=1 && r9 >=0.94" ; + } + + TCut selweight = "1."; + TCut prescale20 = "(event%20==0)"; + TCut prescale100 = "(event%100==0)"; + + //TCut condition = "(etrue/(scRawEnergy + scPreshowerEnergy) >=0.7)"; + + //weightvar title used for per-event weights and selection cuts + + weightvar_lelr.SetTitle(selweight*selcutLowEtaLowR9); /////////////////////////// + weightvar_lehr.SetTitle(selweight*selcutLowEtaHighR9); + weightvar_hehr.SetTitle(selweight*selcutHighEtaHighR9); + weightvar_helr.SetTitle(selweight*selcutHighEtaLowR9); + + //create RooDataSet from TChain + + + RooDataSet *hdata_lelr = RooTreeConvert::CreateDataSet("hdata1",tree,vars1,weightvar_lelr); + RooDataSet *hdata_lehr = RooTreeConvert::CreateDataSet("hdata2",tree,vars2,weightvar_lehr); + RooDataSet *hdata_hehr = RooTreeConvert::CreateDataSet("hdata3",tree,vars3,weightvar_hehr); + RooDataSet *hdata_helr = RooTreeConvert::CreateDataSet("hdata4",tree,vars4,weightvar_helr); + + /*TCanvas *c=new TCanvas("c","",1300,800); + + RooPlot *frame1 = tgtvar1->frame(0.6,2.); + hdata->plotOn(frame1,Name("hdata")); + hdata2->plotOn(frame1,MarkerColor(kRed), LineColor(kRed),Name("hdata2")); + frame1->Draw(); + TLegend *leg = new TLegend(0.6,0.8,0.9,0.9); + leg->AddEntry("hdata","low eta","p"); + leg->AddEntry("hdata2","high eta","p"); + leg->Draw("SAME");*/ + Double_t tgtmin=-0.5,tgtmax=0.6; + Double_t n1min=1.01,n1max=100, n1val=3., n2min=1.01,n2max=100, n2val=3.; + + tgtvar1->setRange(tgtmin,tgtmax); + tgtvar1->setBins(800.); + + RooRealVar mean1("mean1","mean1",0.,-0.5,0.6); + RooRealVar sigma1("sigma1","sigma1",0.01,0.0002,0.5); + RooRealVar alpha11("alpha11","alpha11",3.,0.05,10); + RooRealVar alpha21("alpha21","alpha21",3.,0.05,10); + + RooRealVar n11("n11","n11",n1val,n1min,n1max); + RooRealVar n21("n21","n21",n2val,n2min,n2max); + mean1.setConstant(false); + + tgtvar2->setRange(tgtmin,tgtmax); + tgtvar2->setBins(800.); + RooRealVar mean2("mean2","mean2",0.,tgtmin,tgtmax); + RooRealVar sigma2("sigma2","sigma2",0.01,0.0002,0.5); + RooRealVar alpha12("alpha12","alpha12",3,0.5,100); + RooRealVar alpha22("alpha22","alpha22",3,0.5,10); + + RooRealVar n12("n12","n12",n1val,n1min,n1max); + RooRealVar n22("n22","n22",n2val,n2min,n2max); + mean2.setConstant(false); + + tgtvar3->setRange(tgtmin,tgtmax); + tgtvar3->setBins(800.); + RooRealVar mean3("mean3","mean3",0.,-0.04,0.04); + RooRealVar sigma3("sigma3","sigma3",0.002,0.0002,0.5); + RooRealVar alpha13("alpha13","alpha13",3.,0.05,10); + RooRealVar alpha23("alpha23","alpha23",3.,0.05,10); + + RooRealVar n13("n13","n13",n1val,n1min,n1max); + RooRealVar n23("n23","n22",n2val,n2min,n2max); + mean3.setConstant(false); + + tgtvar4->setRange(tgtmin,tgtmax); + tgtvar4->setBins(800.); + RooRealVar mean4("mean4","mean4",0.,-0.04,0.04); + RooRealVar sigma4("sigma4","sigma4",0.002,0.0002,0.5); + RooRealVar alpha14("alpha14","alpha14",3.,0.05,10); + RooRealVar alpha24("alpha24","alpha24",3.,0.05,10); + + RooRealVar n14("n14","n14",n1val,n1min,n1max); + RooRealVar n24("n24","n24",n2val,n1min,n1max); + mean4.setConstant(false); +/* + RooRealVar mean_2("mean_2","mean_2",1.,0.2,2); + RooRealVar sigma_2("sigma_2","sigma_2",0.002,0.0002,0.5); + RooRealVar alpha1_2("alpha1_2","alpha1_2",1,0.5,100); + RooRealVar n1_2("n1_2","n1_2",1,0.5,100); + RooRealVar alpha2_2("alpha2_2","alpha2_2",1,0.5,100); + RooRealVar n2_2("n2_2","n2_2",1,0.5,100); + mean_2.setConstant(false); +*/ + RooDoubleCBFast pdfCB1("pdfCB1","CB pdf1",*tgtvar1,mean1,sigma1,alpha11,n11,alpha21,n21); + + RooDoubleCBFast pdfCB2("pdfCB2","CB pdf2",*tgtvar2,mean2,sigma2,alpha12,n12,alpha22,n22); + RooDoubleCBFast pdfCB3("pdfCB3","CB pdf3",*tgtvar3,mean3,sigma3,alpha13,n13,alpha23,n23); + RooDoubleCBFast pdfCB4("pdfCB4","CB pdf4",*tgtvar4,mean4,sigma4,alpha14,n14,alpha24,n24); + //RooDoubleCBFast pdfCB_2("pdfCB_2","CB pdf",*tgtvar,mean_2,sigma_2,alpha1_2,n1_2,alpha2_2,n2_2); + + + //Canvas + TCanvas *c = new TCanvas("tgtVar","",1300,800); + c->Divide(2,2); + + + /* RooDoubleCBFast *pdfCB; + RooPlot *xframe1 = tgtvar1->frame(Title("fit of data")); + hdata_lelr->plotOn(xframe1); + + Double_t min(-0.015), max(0.01); + for(Int_t i=0;i<10;i++) { + pdfCB = new RooDoubleCBFast("pdfCB","CB pdf",*tgtvar1,mean1,sigma1,alpha11,n11,alpha21,n21); + pdfCB->fitTo(*hdata_lelr,Range(min,max)); + min-=0.01; + max+=0.01; + // + if(i+1!=10) { + pdfCB->plotOn(xframe1,LineColor(i+1)); + } + else { + pdfCB->plotOn(xframe1,LineColor(28)); + } + + } + xframe1->Draw();*/ + + // RooRealVar coeff("coeff","coeff",0.5,0.,1.); + + // RooAddPdf sumCB("sumCB","sum of CB pdfs",RooArgList(pdfCB,pdfCB_2),coeff); + // sumCB.fitTo(*hdata); + + + //sumCB.plotOn(xframe); + //sumCB.plotOn(xframe,Components(pdfCB),LineStyle(kDashed),LineColor(kRed)); + //sumCB.plotOn(xframe,Components(pdfCB_2),LineStyle(kDashed),LineColor(kRed)); + + +//Canvas + //TCanvas *canvas_tgtvar2 = new TCanvas("tgtVar2","",800,800); + c->cd(1); + gPad->SetGridx(); + gPad->SetGridy(); + + RooPlot *xframe1 = tgtvar1->frame(Title("fit of data_lelr")); + hdata_lelr->plotOn(xframe1); + pdfCB1.fitTo(*hdata_lelr); + pdfCB1.plotOn(xframe1); + xframe1->Draw(); + + c->cd(2); + gPad->SetGridx(); + gPad->SetGridy(); + + RooPlot *xframe2 = tgtvar2->frame(Title("fit of data_lehr")); + hdata_lehr->plotOn(xframe2); + + + // + pdfCB2.fitTo(*hdata_lehr); + pdfCB2.plotOn(xframe2); + xframe2->Draw(); + + c->cd(3); + gPad->SetGridx(); + gPad->SetGridy(); + + RooPlot *xframe3 = tgtvar3->frame(Title("fit of data_hehr")); + hdata_hehr->plotOn(xframe3); + + + // + pdfCB3.fitTo(*hdata_hehr); + pdfCB3.plotOn(xframe3); + xframe3->Draw(); + + c->cd(4); + gPad->SetGridx(); + gPad->SetGridy(); + + RooPlot *xframe4 = tgtvar4->frame(Title("fit of data_helr")); + hdata_helr->plotOn(xframe4); + + + // + pdfCB4.fitTo(*hdata_helr); + pdfCB4.plotOn(xframe4); + xframe4->Draw(); + + + delete hdata_lelr; + delete hdata_lehr; + delete hdata_hehr; + delete hdata_helr; + return; + +} diff --git a/macros/examples/fitslices.C b/macros/examples/fitslices.C new file mode 100644 index 0000000..e69de29 diff --git a/macros/examples/hist_iEta_iPhi.C b/macros/examples/hist_iEta_iPhi.C new file mode 100644 index 0000000..84fa80d --- /dev/null +++ b/macros/examples/hist_iEta_iPhi.C @@ -0,0 +1,77 @@ +//***************************************************************************** +// Macro to draw and save histograms of "input variables" for the regression +// procedure +//***************************************************************************** +#include "TROOT.h" +#include "TFile.h" +#include "TChain.h" +#include "TCanvas.h" +#include "TPad.h" +#include "TTree.h" +#include "TStyle.h" +#include "TCut.h" +#include +#include "TSystem.h" +#include "TH2.h" +//Using a TChain class in case of a Tree on multiple files +using namespace std; +void hist_iEta_iPhi(bool dobarrel = true) +{ + + TString dirname; + if (dobarrel) + dirname = "barrel/"; + else + dirname = "endcap/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + //Get the Tree + TChain *tree; + tree = new TChain("promptTree"); //Name + tree->Add("/afs/cern.ch/user/m/musella/public/forKenza/gam_gam_phys14_v5_regtraining_v3.root"); + + + //Print number of overflows and underflows in statBox + gStyle->SetOptStat(1111110); + + + //Define Canvas properties + Double_t canvas_width(1300); + Double_t canvas_height(800); + + TString add_name; + TCut selection1, selection2; + if (dobarrel) + add_name = "_eb_gam_gam.png"; + else + add_name = "_ee_gam_gam.png"; + + //Cut on events + if (dobarrel) { + //selection = "(abs(scEta)<=1.5 && kSaturated[12]!=1 )"; + selection1 = "(abs(scEta)<=1.5 && kSaturated[12]!=1 && r9 >= 0.94)"; + selection2 = "(abs(scEta)<=1.5 && kSaturated[12]!=1 && r9 < 0.94)"; + } + else { + //selection = "(abs(scEta)>1.5 && kSaturated[12]!=1 )"; + } + + TCanvas *canvas_iphi_ieta = new TCanvas("iphi_ieta_Histo","",canvas_width,canvas_height); + canvas_iphi_ieta->Divide(1,2); + canvas_iphi_ieta->cd(1); + gPad->SetGridx(); + gPad->SetGridy(); + //TH2 *hist = new TH2(); + tree->Draw("iPhi:iEta >> hist1(171,-85.5,85.5,361,-0.5,360.5)",selection1,"colz"); + canvas_iphi_ieta->cd(2); + gPad->SetGridx(); + gPad->SetGridy(); + //TH2 *hist = new TH2(); + tree->Draw("iPhi:iEta >> hist2(171,-85.5,85.5,361,-0.5,360.5)",selection2,"colz"); + +} + + + + diff --git a/macros/examples/histo_effsigma.C b/macros/examples/histo_effsigma.C new file mode 100644 index 0000000..c1a499e --- /dev/null +++ b/macros/examples/histo_effsigma.C @@ -0,0 +1,7 @@ +#include + + +void histo_effsigma() + std::ifstream file("program.txt"); + for(std::string word; file >> word; ) + std::cout << word << '\n'; diff --git a/macros/examples/iVarsHist.C b/macros/examples/iVarsHist.C new file mode 100644 index 0000000..d3d7cb0 --- /dev/null +++ b/macros/examples/iVarsHist.C @@ -0,0 +1,479 @@ +//***************************************************************************** +// Macro to draw and save histograms of "input variables" for the regression +// procedure +//***************************************************************************** +#include "TROOT.h" +#include "TFile.h" +#include "TChain.h" +#include "TCanvas.h" +#include "TPad.h" +#include "TTree.h" +#include "TStyle.h" +#include "TCut.h" +#include +#include "TSystem.h" +//Using a TChain class in case of a Tree on multiple files +using namespace std; +void iVarsHist(bool dobarrel = true) +{ + + TString dirname; + if (dobarrel) + dirname = "Barrel_inputs_saturatedAndNotSaturated/"; + else + dirname = "Endcap_inputs_saturatedAndNotSaturated/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + //Get the Tree + //TChain *fTree; + //fTree = new TChain("regressionAnalyzer/promptTree"); //Name + //fTree->Add("/afs/cern.ch/user/m/musella/public/forKenza/gam_gam_phys14_v5_regtraining_v3.root"); + //fTree->Add("/afs/cern.ch/user/m/mdonega/public/forKenza/output_SinglePhoton_FlatPt-300To3000_numEvent100.root"); + //fTree->Add("/tmp/mdonega/output_SinglePhoton_FlatPt-300To3000.root"); + TChain* fTree = new TChain("promptTree"); + fTree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-300To3000.root"); + fTree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-5To300_lessstat.root"); + //______________________________________________________________________ + // Drawing histograms + //______________________________________________________________________ + + //Print number of overflows and underflows in statBox + gStyle->SetOptStat(1111110); + + + //Define Canvas properties + Double_t canvas_width(1300); + Double_t canvas_height(800); + + //Get weights + //Float_t sum_of_weights = 0., value_of_weight; + //Compute sum of weights + //Long64_t number_of_entries = fTree->GetEntries(); + //fTree->SetBranchAddress("weight",&value_of_weight); + //for(Long64_t ii=0; iiGetEntry(ii); + // sum_of_weights +=value_of_weight; + //} + //fTree->SetAlias("nEntries","This->GetEntries()"); + //TString str = ""; + //str.Form("%f",fTree->GetEntries()*1./sum_of_weights); + + + //TString cut_expression = "( abs(scEta)<=1.5) * nEntries*weight* 1./"+str; + //TString cut_expression = "( abs(scEta)<=1.5) *weight *"+str; + //TCut selweight(cut_expression); + + //int gg = (fTree->GetEntries()); + //printf("sum_of_weights: %f\n", gg *1./ sum_of_weights ); + //printf("number_of_entries: %d\n", gg ); + + + //name of images + TString add_name; + TCut selection; + if (dobarrel) + add_name = "_eb_gam_gam.png"; + else + add_name = "_ee_gam_gam.png"; + + //Cut on events + if (dobarrel) + selection = "(etrue*pt/energy >=200. && etrue*pt/energy<=3000 && abs(scEta)<1.5 )"; + else + selection = "(etrue*pt/energy >=200. && etrue*pt/energy<=3000 && abs(scEta)>1.5 )"; + + +// --------- Energy + // Canvas 1: Energy_Histo + TCanvas *canvas_energy = new TCanvas("Energy_Histo","Histograms of energy variables",canvas_width,canvas_height); + TPad *padTop1 = new TPad("padTop1","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom1 = new TPad("padBottom1","padBottom",0.05,0.05,0.95,0.45,256); + padTop1->Divide(3,1); + padBottom1->Divide(3,1); + + padTop1->Draw(); + padBottom1->Draw(); + + padTop1->cd(1); + fTree->Draw("scRawEnergy",selection); + padTop1->cd(2); + fTree->Draw("etrue",selection); + padTop1->cd(3); + fTree->Draw("scSeedEnergy",selection); + padBottom1->cd(1); + fTree->Draw("pt",selection); + padBottom1->cd(2); + fTree->Draw("scPreshowerEnergy",selection); + padBottom1->cd(3); + fTree->Draw("hadTowOverEm",selection); + //TH1F *histo = (TH1F*)gDirectory->Get("htemp"); + canvas_energy->SaveAs("energy"+add_name); + + // --------- Phi and Eta + // Canvas 2: Phi_and_Eta_Histo + TCanvas *canvas_phi_eta = new TCanvas("phi_eta_Histo","Histograms of phi and eta variables",canvas_width,canvas_height); + TPad *padTop2 = new TPad("padTop2","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom2 = new TPad("padBottom2","padBottom",0.05,0.05,0.95,0.45,256); + padTop2->Divide(4,1); + padBottom2->Divide(4,1); + + padTop2->Draw(); + padBottom2->Draw(); + + padTop2->cd(1); + fTree->Draw("scEta",selection); + padTop2->cd(2); + fTree->Draw("eta",selection); + padTop2->cd(3); + fTree->Draw("etaWidth",selection); + padTop2->cd(4); + fTree->Draw("cryEta",selection); + + padBottom2->cd(1); + fTree->Draw("scPhy",selection); + padBottom2->cd(2); + fTree->Draw("phi",selection); + padBottom2->cd(3); + fTree->Draw("phiWidth",selection); + padBottom2->cd(4); + fTree->Draw("cryPhi",selection); + canvas_phi_eta->SaveAs("phi_eta"+add_name); + + // --------- IPhi and IEta + // Canvas 3: IPhi_and_IEta_Histo + TCanvas *canvas_iphi_ieta = new TCanvas("iphi_ieta_Histo","Histograms of iphi and ieta variables",canvas_width,canvas_height); + TPad *padTop3 = new TPad("padTop3","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom3 = new TPad("padBottom3","padBottom",0.05,0.05,0.95,0.45,256); + padTop3->Divide(2,1); + padBottom3->Divide(3,1); + + padTop3->Draw(); + padBottom3->Draw(); + + padTop3->cd(1); + fTree->Draw("iEta",selection); + padTop3->cd(2); + fTree->Draw("iPhi",selection); + + padBottom3->cd(1); + fTree->Draw("sigmaIphiIphi",selection); + padBottom3->cd(2); + fTree->Draw("sigmaIetaIeta",selection); + padBottom3->cd(3); + fTree->Draw("covarianceIetaIphi",selection); + canvas_iphi_ieta->SaveAs("iphi_ieta"+add_name); + + // --------- rho, R9, csize,nvtx : RRCV + // Canvas 4: rho, R9, Cluster size, and number of vertices + TCanvas *canvas_RRCV = new TCanvas("CVR_Histo","Histograms of rho, R9, Cluster size, and number of vertices",canvas_width,canvas_height); + TPad *padTop4 = new TPad("padTop4","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom4 = new TPad("padBottom4","padBottom",0.05,0.05,0.95,0.45,256); + padTop4->Divide(3,1); + padBottom4->Divide(2,1); + + padTop4->Draw(); + padBottom4->Draw(); + + padTop4->cd(1); + fTree->Draw("rho"); + padTop4->cd(2); + fTree->Draw("r9",selection); + padTop4->cd(3); + fTree->Draw("full5x5_r9",selection); + + padBottom4->cd(1); + fTree->Draw("scClustersSize",selection); + padBottom4->cd(2); + fTree->Draw("nvtx"); + canvas_RRCV->SaveAs("rho_R9_csize_nvtx"+add_name); + + // --------- Energy2 + // Canvas 5: eMax, e2nd, eTop, eBottom, eLeft, eRight + + TCanvas *canvas_energy2 = new TCanvas("Energy2_Histo","Histograms of energy variables (Max, right, Left...)",canvas_width,canvas_height); + TPad *padTop5 = new TPad("padTop5","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom5 = new TPad("padBottom5","padBottom",0.05,0.05,0.95,0.45,256); + padTop5->Divide(3,1); + padBottom5->Divide(3,1); + + padTop5->Draw(); + padBottom5->Draw(); + + padTop5->cd(1); + fTree->Draw("eMax",selection); + padTop5->cd(2); + fTree->Draw("e2nd",selection); + padTop5->cd(3); + fTree->Draw("eTop",selection); + padBottom5->cd(1); + fTree->Draw("eBottom",selection); + padBottom5->cd(2); + fTree->Draw("eLeft",selection); + padBottom5->cd(3); + fTree->Draw("eRight",selection); + canvas_energy2->SaveAs("eMax_2nd_Top_Bottom_Left_Right"+add_name); + + + // --------- Energy3 + // Canvas 6: e2x5Max, e2x5Top, e2x5Bottom, e2x5Left, e2x5Right + + TCanvas *canvas_energy3 = new TCanvas("Energy3_Histo","Histograms of e2x5 variables (Max, right, Left...)",canvas_width,canvas_height); + TPad *padTop6 = new TPad("padTop6","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom6 = new TPad("padBottom6","padBottom",0.05,0.05,0.95,0.45,256); + padTop6->Divide(3,1); + padBottom6->Divide(2,1); + + padTop6->Draw(); + padBottom6->Draw(); + + padTop6->cd(1); + fTree->Draw("e2x5Max",selection); + padTop6->cd(2); + fTree->Draw("e2x5Top",selection); + padTop6->cd(3); + fTree->Draw("e2x5Bottom",selection); + padBottom6->cd(1); + fTree->Draw("e2x5Left",selection); + padBottom6->cd(2); + fTree->Draw("e2x5Right",selection); + canvas_energy3->SaveAs("e2x5Vars"+add_name); + + // --------- Comparison with full5x5 + // Canvas 7: full5x5_e3x3, full5x5_e5x5, full5x5_sigmaIetaIeta + + + TCanvas *canvas_comparison = new TCanvas("Comparison_with_full5x5_Histo","Histograms of full5x5 variables",canvas_width,canvas_height); + TPad *padTop7 = new TPad("padTop7","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom7 = new TPad("padBottom7","padBottom",0.05,0.05,0.95,0.45,256); + padTop7->Divide(3,1); + padBottom7->Divide(3,1); + + padTop7->Draw(); + padBottom7->Draw(); + + padTop7->cd(1); + fTree->Draw("full5x5_e3x3",selection); + padTop7->cd(2); + fTree->Draw("full5x5_e5x5",selection); + padTop7->cd(3); + fTree->Draw("full5x5_sigmaIetaIeta",selection); + padBottom7->cd(1); + fTree->Draw("e3x3",selection); + padBottom7->cd(2); + fTree->Draw("e5x5",selection); + padBottom7->cd(3); + fTree->Draw("sigmaIetaIeta",selection); + canvas_comparison->SaveAs("comparison_full5x5"+add_name); + + // --------- weight and Luminosity + // Canvas 8: weight and luminosity (weight_lumi) + + + // TCanvas *canvas_weight_lumi = new TCanvas("weight_lumi_Histo","Histograms of weight and luminosity variables",canvas_width,canvas_height); + // canvas_weight_lumi->Divide(2,1); + // + // canvas_weight_lumi->cd(1); + // fTree->Draw("weight",selection); + // canvas_weight_lumi->cd(2); + // fTree->Draw("lumi",selection); + // canvas_weight_lumi->SaveAs("weight_lumi"+add_name); + +//_____________________________ + /* TString add_name("_restricted_range.png"); + // --------- Energy + // Canvas 1: Energy_Histo + TCanvas *canvas_energy = new TCanvas("Energy_Histo","Histograms of energy variables",canvas_width,canvas_height); + TPad *padTop1 = new TPad("padTop1","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom1 = new TPad("padBottom1","padBottom",0.05,0.05,0.95,0.45,256); + padTop1->Divide(3,1); + padBottom1->Divide(3,1); + + padTop1->Draw(); + padBottom1->Draw(); + + padTop1->cd(1); + fTree->Draw("scRawEnergy","weight* (scRawEnergy<1000 && abs(scEta)<=1.5)"); + padTop1->cd(2); + fTree->Draw("etrue","weight* (etrue<1000 && abs(scEta)<=1.5)"); + padTop1->cd(3); + fTree->Draw("scSeedEnergy","weight* (scSeedEnergy<1000 && abs(scEta)<=1.5)"); + padBottom1->cd(1); + fTree->Draw("pt","weight* (pt<1000 && abs(scEta)<=1.5)"); + padBottom1->cd(2); + fTree->Draw("scPreshowerEnergy","weight* (scPreshowerEnergy<100 && abs(scEta)<=1.5)"); + padBottom1->cd(3); + fTree->Draw("hadTowOverEm","weight* (hadTowOverEm<100 && abs(scEta)<=1.5)"); + //TH1F *histo = (TH1F*)gDirectory->Get("htemp"); + canvas_energy->SaveAs("energy"+add_name); + + // --------- Phi and Eta + // Canvas 2: Phi_and_Eta_Histo + TCanvas *canvas_phi_eta = new TCanvas("phi_eta_Histo","Histograms of phi and eta variables",canvas_width,canvas_height); + TPad *padTop2 = new TPad("padTop2","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom2 = new TPad("padBottom2","padBottom",0.05,0.05,0.95,0.45,256); + padTop2->Divide(4,1); + padBottom2->Divide(4,1); + + padTop2->Draw(); + padBottom2->Draw(); + + padTop2->cd(1); + fTree->Draw("scEta","weight* (abs(scEta)<=1.5)"); + padTop2->cd(2); + fTree->Draw("eta","weight* (abs(scEta)<=1.5)"); + padTop2->cd(3); + fTree->Draw("etaWidth","weight* (etaWidth<0.04 && abs(scEta)<=1.5)"); + padTop2->cd(4); + fTree->Draw("cryEta","weight* (abs(scEta)<=1.5)"); + + padBottom2->cd(1); + fTree->Draw("scPhy","weight* (abs(scEta)<=1.5)"); + padBottom2->cd(2); + fTree->Draw("phi","weight* (abs(scEta)<=1.5)"); + padBottom2->cd(3); + fTree->Draw("phiWidth","weight* (phiWidth<0.1 && abs(scEta)<=1.5)"); + padBottom2->cd(4); + fTree->Draw("cryPhi","weight* (abs(scEta)<=1.5)"); + canvas_phi_eta->SaveAs("phi_eta"+add_name); + + // --------- IPhi and IEta + // Canvas 3: IPhi_and_IEta_Histo + TCanvas *canvas_iphi_ieta = new TCanvas("iphi_ieta_Histo","Histograms of iphi and ieta variables",canvas_width,canvas_height); + TPad *padTop3 = new TPad("padTop3","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom3 = new TPad("padBottom3","padBottom",0.05,0.05,0.95,0.45,256); + padTop3->Divide(2,1); + padBottom3->Divide(3,1); + + padTop3->Draw(); + padBottom3->Draw(); + + padTop3->cd(1); + fTree->Draw("iEta","weight* (abs(scEta)<=1.5)"); + padTop3->cd(2); + fTree->Draw("iPhi","weight* (abs(scEta)<=1.5)"); + + padBottom3->cd(1); + fTree->Draw("sigmaIphiIphi","weight* (sigmaIphiIphi<0.35 && abs(scEta)<=1.5)"); + padBottom3->cd(2); + fTree->Draw("sigmaIetaIeta","weight* (abs(scEta)<=1.5)"); + padBottom3->cd(3); + fTree->Draw("covarianceIetaIphi","weight* (covarianceIetaIphi<5 && covarianceIetaIphi>-10 && abs(scEta)<=1.5)"); + canvas_iphi_ieta->SaveAs("iphi_ieta"+add_name); + + // --------- rho, R9, csize,nvtx : RRCV + // Canvas 4: rho, R9, Cluster size, and number of vertices + TCanvas *canvas_RRCV = new TCanvas("CVR_Histo","Histograms of rho, R9, Cluster size, and number of vertices",canvas_width,canvas_height); + TPad *padTop4 = new TPad("padTop4","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom4 = new TPad("padBottom4","padBottom",0.05,0.05,0.95,0.45,256); + padTop4->Divide(3,1); + padBottom4->Divide(2,1); + + padTop4->Draw(); + padBottom4->Draw(); + + padTop4->cd(1); + fTree->Draw("rho"); + padTop4->cd(2); + fTree->Draw("r9","weight* (abs(scEta)<=1.5 && r9<1.05 && r9>0.65)"); + padTop4->cd(3); + fTree->Draw("full5x5_r9","weight* (abs(scEta)<=1.5 && full5x5_r9<1.05 && full5x5_r9>0.65)"); + + padBottom4->cd(1); + fTree->Draw("scClustersSize","weight* (abs(scEta)<=1.5 && scClustersSize<15)"); + padBottom4->cd(2); + fTree->Draw("nvtx"); + canvas_RRCV->SaveAs("rho_R9_csize_nvtx"+add_name); + + // --------- Energy2 + // Canvas 5: eMax, e2nd, eTop, eBottom, eLeft, eRight + + TCanvas *canvas_energy2 = new TCanvas("Energy2_Histo","Histograms of energy variables (Max, right, Left...)",canvas_width,canvas_height); + TPad *padTop5 = new TPad("padTop5","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom5 = new TPad("padBottom5","padBottom",0.05,0.05,0.95,0.45,256); + padTop5->Divide(3,1); + padBottom5->Divide(3,1); + + padTop5->Draw(); + padBottom5->Draw(); + + padTop5->cd(1); + fTree->Draw("eMax","weight* (abs(scEta)<=1.5 && eMax<1000)"); + padTop5->cd(2); + fTree->Draw("e2nd","weight* (abs(scEta)<=1.5 && e2nd<1000)"); + padTop5->cd(3); + fTree->Draw("eTop","weight* (abs(scEta)<=1.5 && eTop<1000)"); + padBottom5->cd(1); + fTree->Draw("eBottom","weight* (abs(scEta)<=1.5 && eBottom<1000)"); + padBottom5->cd(2); + fTree->Draw("eLeft","weight* (abs(scEta)<=1.5 && eLeft<1000)"); + padBottom5->cd(3); + fTree->Draw("eRight","weight* (abs(scEta)<=1.5 && eRight<1000)"); + canvas_energy2->SaveAs("eMax_2nd_Top_Bottom_Left_Right"+add_name); + + + // --------- Energy3 + // Canvas 6: e2x5Max, e2x5Top, e2x5Bottom, e2x5Left, e2x5Right + + TCanvas *canvas_energy3 = new TCanvas("Energy3_Histo","Histograms of e2x5 variables (Max, right, Left...)",canvas_width,canvas_height); + TPad *padTop6 = new TPad("padTop6","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom6 = new TPad("padBottom6","padBottom",0.05,0.05,0.95,0.45,256); + padTop6->Divide(3,1); + padBottom6->Divide(2,1); + + padTop6->Draw(); + padBottom6->Draw(); + + padTop6->cd(1); + fTree->Draw("e2x5Max","weight* (abs(scEta)<=1.5 && e2x5Max<1000)"); + padTop6->cd(2); + fTree->Draw("e2x5Top","weight* (abs(scEta)<=1.5 && e2x5Top<1000)"); + padTop6->cd(3); + fTree->Draw("e2x5Bottom","weight* (abs(scEta)<=1.5 && e2x5Bottom<1000)"); + padBottom6->cd(1); + fTree->Draw("e2x5Left","weight* (abs(scEta)<=1.5 && e2x5Left<1000)"); + padBottom6->cd(2); + fTree->Draw("e2x5Right","weight* (abs(scEta)<=1.5 && e2x5Right<1000)"); + canvas_energy3->SaveAs("e2x5Vars"+add_name); + + // --------- Comparison with full5x5 + // Canvas 7: full5x5_e3x3, full5x5_e5x5, full5x5_sigmaIetaIeta + + + TCanvas *canvas_comparison = new TCanvas("Comparison_with_full5x5_Histo","Histograms of full5x5 variables",canvas_width,canvas_height); + TPad *padTop7 = new TPad("padTop7","padTop",0.05,0.5,0.95,0.95,256); + TPad *padBottom7 = new TPad("padBottom7","padBottom",0.05,0.05,0.95,0.45,256); + padTop7->Divide(3,1); + padBottom7->Divide(3,1); + + padTop7->Draw(); + padBottom7->Draw(); + + padTop7->cd(1); + fTree->Draw("full5x5_e3x3","weight* (abs(scEta)<=1.5 && full5x5_e3x3<1000)"); + padTop7->cd(2); + fTree->Draw("full5x5_e5x5","weight* (abs(scEta)<=1.5 && full5x5_e5x5<1000)"); + padTop7->cd(3); + fTree->Draw("full5x5_sigmaIetaIeta","weight* (abs(scEta)<=1.5 && full5x5_sigmaIetaIeta<0.35)"); + padBottom7->cd(1); + fTree->Draw("e3x3","weight* (abs(scEta)<=1.5 && e3x3<1000)"); + padBottom7->cd(2); + fTree->Draw("e5x5","weight* (abs(scEta)<=1.5 && e5x5<1000)"); + padBottom7->cd(3); + fTree->Draw("sigmaIetaIeta","weight* (abs(scEta)<=1.5 && sigmaIetaIeta<0.35)"); + canvas_comparison->SaveAs("comparison_full5x5"+add_name); + + // --------- weight and Luminosity + // Canvas 8: weight and luminosity (weight_lumi) + + + TCanvas *canvas_weight_lumi = new TCanvas("weight_lumi_Histo","Histograms of weight and luminosity variables",canvas_width,canvas_height); + canvas_weight_lumi->Divide(2,1); + + canvas_weight_lumi->cd(1); + fTree->Draw("weight","weight* (abs(scEta)<=1.5)"); + canvas_weight_lumi->cd(2); + fTree->Draw("lumi","weight* (abs(scEta)<=1.5)"); + canvas_weight_lumi->SaveAs("weight_lumi"+add_name); */ + +} diff --git a/macros/examples/pt_distribution_allEvents.png b/macros/examples/pt_distribution_allEvents.png new file mode 100644 index 0000000..cc0ebe3 Binary files /dev/null and b/macros/examples/pt_distribution_allEvents.png differ diff --git a/macros/examples/resolution_effsigmaCB_RawCor.C b/macros/examples/resolution_effsigmaCB_RawCor.C new file mode 100644 index 0000000..7e8073f --- /dev/null +++ b/macros/examples/resolution_effsigmaCB_RawCor.C @@ -0,0 +1,477 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "TH2.h" +#include "TProfile.h" +#include "TStyle.h" +#include "TGaxis.h" +#include "TGraphErrors.h" + +using namespace RooFit; + +//effsigma function from Chris +Double_t effSigma(TH1 * hist); + +//function that fit the energy ratio with a gaussian and plot the result for both raw/true and cor/true distributions +void plot_resolution(TString arg_variable, Double_t xmin, Double_t xmax, Int_t nbins, Double_t* xbins, Double_t step, Double_t init, TString nameXaxis, TString add_to_pngFileName, RooDataSet* hdata, RooRealVar* rawvar, RooRealVar* ecorvar, TCanvas* c_reso); + +void resolution_effsigmaCB_RawCor(bool dobarrel=true, bool weighted=false) { + + //output dir + TString dirname = "Barrel_Log_sig3_EvenOddEvts_alpha2-3/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + TCut cutUsed = "(event%2==1)"; + + //read workspace from training + TString fname; //name of the training output file + TString add_to_pngFileName, add_to_rootFileName; //extension of root and png files + + if (dobarrel) + { + fname = "wereg_ph_eb.root"; + add_to_pngFileName = "_eb.png"; + add_to_rootFileName = "_eb.root"; + } + else + { + fname = "wereg_ph_ee.root"; + add_to_pngFileName = "_ee.png"; + add_to_rootFileName = "_ee.root"; + } + add_to_rootFileName = add_to_rootFileName; //add particular info in file name + add_to_pngFileName = add_to_pngFileName; + + //Workspace + TString infile = TString::Format("./%s",fname.Data()); + TFile *fws = TFile::Open(infile); + RooWorkspace *ws = (RooWorkspace*)fws->Get("wereg"); + + //read variables from workspace + RooGBRTargetFlex *meantgt = static_cast(ws->arg("sigmeant")); + RooRealVar *tgtvar = ws->var("tgtvar"); + RooRealVar *etrue = new RooRealVar("etrue","etrue",0.); + RooRealVar *scRawEnergy = new RooRealVar("scRawEnergy","scRawEnergy",0.); + //RooRealVar *maxEnergyXtal = new RooRealVar("maxEnergyXtal","maxEnergyXtal",0.); + + RooArgList vars; + vars.add(meantgt->FuncVars()); + vars.add(*tgtvar); + vars.add(*etrue); + vars.add(*scRawEnergy); + //vars.add(*maxEnergyXtal); + + + //read testing dataset from TTree + RooRealVar weightvar("weightvar","",1.); + + TTree *dtree; + + TFile *fTree = TFile::Open("/afs/cern.ch/user/m/musella/public/forKenza/gam_gam_phys14_v5_regtraining_v3.root"); // + dtree = (TTree*)fTree->Get("promptTree"); + /*if(true_energy) { + if(!weighted) { + dtree->Draw("etrue>>h1"); + dtree->Draw("scEta>>h2","etrue<=2500"); + dtree->Draw("scEta>>h3","etrue>2500 && etrue<=3000"); + dtree->Draw("scEta>>h4","etrue>3000 && etrue<=5000"); + } + else { + dtree->Draw("etrue>>h1","weight"); + dtree->Draw("scEta>>h2","weight*(etrue<=2500)"); + dtree->Draw("scEta>>h3","weight*(etrue>2500 && etrue<=3000)"); + dtree->Draw("scEta>>h4","weight*(etrue>3000 && etrue<=5000)"); + } + } + else { + if(!weighted) { + dtree->Draw("energy>>h1","pt>250. && kSaturated[12]==1 && abs(scEta)<=1.5 && abs(ieta[12])!=1 && abs(ieta[12])!=25 && abs(ieta[12])!=26 && abs(ieta[12])!=45 && abs(ieta[12])!=46 && abs(ieta[12])!=65 && abs(ieta[12])!=66 && abs(ieta[12])!=85"); + //dtree->Draw("scEta>>h2","pt<=2000"); + //dtree->Draw("scEta>>h3","pt>2000 && pt<=3000"); + //dtree->Draw("scEta>>h4","pt>3000 && pt<=5000"); + } + else { + dtree->Draw("pt>>h1","weight"); + dtree->Draw("scEta>>h2","weight*(pt<=2500)"); + dtree->Draw("scEta>>h3","weight*(pt>2500 && pt<=3000)"); + dtree->Draw("scEta>>h4","weight*(pt>3000 && pt<=5000)"); + } + }*/ + //dtree->Draw("etrue>>h5","weight*(pt<=2000)"); + //dtree->Draw("etrue>>h6","weight*(pt>2000 && pt<=3500)"); + //dtree->Draw("etrue>>h7","weight*(pt>3500 && pt<=5000)"); + //selection cuts for testing + TCut selcut; + + if (dobarrel) + selcut = "pt>250. && kSaturated[12]!=1 && abs(scEta)<1.5"; + else + selcut = "pt>250. && kSaturated[12]!=1 && abs(scEta)>1.5"; + + + TCut selweight; + if(weighted) + selweight= "(weight)"; + else + selweight= "(1.)"; + + + //weightvar.SetTitle(cutUsed*selcut); + weightvar.SetTitle(cutUsed*selcut*selweight); + + //create the testing dataset + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",dtree,vars,weightvar); + + //retrieve full pdf from workspace + //RooAbsPdf *sigpdf = ws->pdf("sigpdf"); + + //regressed output functions + RooAbsReal *sigmeanlim = ws->function("sigmeanlim"); + //RooAbsReal *sigwidthlim = ws->function("sigwidthlim"); + + + RooRealVar *pt; + RooRealVar *scetavar = ws->var("var_1"); + if(dobarrel) + scetavar->setRange(-1.5,1.5); + else + scetavar->setRange(-3.,3.); + + if(!dobarrel) { + RooRealVar *preshowerEnergy = ws->var("var_28"); + //formula for Pt corrected_energy/Cosh(eta) = ecorvar*tgtvar*rawvar/cosh(eta) + RooFormulaVar ptFormula("pt","","exp(@0)*@1*(1+@2)*1./(cosh(@3))",RooArgList(*sigmeanlim,*scRawEnergy,*preshowerEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(250.,5000); // + } + else { + RooFormulaVar ptFormula("pt","","exp(@0)*@1*1./(cosh(@2))",RooArgList(*sigmeanlim,*scRawEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(250.,5000); // + } + + + //create xbins that contains the fit slices limits + Int_t nbins=10; + Double_t *xbins=0, step, init=0.; + step=500.; + /*if (dobarrel) { + step = 500; + } + else { + step = 250; + }*/ + + xbins = (Double_t*)malloc(sizeof(Double_t)*(nbins+1)); + + for(int ii=0;ii<=nbins; ii++) { + xbins[ii]=init+step*ii; + } + + + //formula for corrected energy/true energy ( 1.0/(etrue/eraw) * regression mean) + RooFormulaVar ecor("ecor","","1./exp(@0)*exp(@1)",RooArgList(*tgtvar,*sigmeanlim)); + RooRealVar *ecorvar = (RooRealVar*)hdata->addColumn(ecor); + ecorvar->setRange(0.6,1.2); + ecorvar->setBins(800); + + //formula for raw energy/true energy + RooFormulaVar raw("raw","","1./exp(@0)",RooArgList(*tgtvar)); + RooRealVar *rawvar = (RooRealVar*)hdata->addColumn(raw); + rawvar->setRange(0.6,1.2); + rawvar->setBins(800); + + TCanvas *c_reso = new TCanvas("c_reso","",800,800); + + //plot_resolution("etrue",0.,5000.,nbins, xbins, step, init, "photon true energy (GeV)", add_to_pngFileName, hdata, rawvar,ecorvar, c_reso); + //c_reso->SaveAs("resolution_vs_etrue.png"); + + plot_resolution("pt",0.,5000.,nbins, xbins, step, init, "pT (GeV)", add_to_pngFileName, hdata, rawvar,ecorvar, c_reso); + c_reso->SaveAs("resolution_vs_pt_CMS.png"); + c_reso->SaveAs("resolution_vs_pt_CMS.root"); +} +void plot_resolution(TString arg_variable, Double_t xmin, Double_t xmax, Int_t nbins, Double_t* xbins, Double_t step, Double_t init, TString nameXaxis, TString add_to_pngFileName, RooDataSet* hdata, RooRealVar* rawvar, RooRealVar* ecorvar, TCanvas* c_reso) +{ + + TString str1, str2, str3, str4, variable, str; + TH1F* h_gaussian_raw = new TH1F("h_gaussian_raw","",nbins,xbins); + TH1F* h_gaussian_cor = new TH1F("h_gaussian_cor","",nbins,xbins); + + TH1F* h_raw = new TH1F("h_raw"," ",nbins,xbins); + TH1F* h_cor = new TH1F("h_cor"," ",nbins,xbins); + + TCanvas *craw = new TCanvas("craw","craw"); //------------------------------------------------------------CANVAS + craw->Divide(5,2); + TCanvas *ccor = new TCanvas("ccor","ccor"); //------------------------------------------------------------CANVAS + ccor->Divide(5,2); + + for(Int_t i=0; i"+str4+"+("+str3+"*"+str1+") && "+variable+"<"+str4+"+("+str3+"*"+str2+") "; + + hdata_reduced = (RooDataSet*)hdata->reduce(str); + + //compute effective sigma + TH1 *hecor = hdata_reduced->createHistogram("hecor",*ecorvar,Binning(20e3,0.,4.)); + TH1 *hraw = hdata_reduced->createHistogram("hraw",*rawvar,Binning(20e3,0.,4.)); + + + printf("calc effsigma\n"); + double effsigmaCor=(effSigma(hecor)); + double effsigmaRaw=(effSigma(hraw)); + printf("raw = %5f - corr = %5f\n",effsigmaRaw,effsigmaCor); + if(!std::isnormal(effsigmaCor) || !std::isnormal(effsigmaRaw)) continue; + h_raw->AddBinContent(i+1,100.*effsigmaRaw); + h_cor->AddBinContent(i+1,100.*effsigmaCor); + + RooDataSet *hdata2 = (RooDataSet*)hdata_reduced->reduce(*ecorvar); + RooRealVar mean_cor("mean_cor","mean_cor",1,0.9,1.1); + RooRealVar sig_cor("sig_cor","sig_cor",0.01,0.0002,0.8); + RooRealVar a1_cor("a1_cor","a1_cor",3,0.05,10); + RooRealVar a2_cor("a2_cor","a2_cor",3,0.05,10); + RooRealVar n1_cor("n1_cor","n1_cor",3,1.01,500); + RooRealVar n2_cor("n2_cor","n2_cor",3,1.01,500); + + RooDoubleCBFast pdfCB_cor("pdfCB_cor","pdfCB_cor",*ecorvar,mean_cor,sig_cor,a1_cor,n1_cor,a2_cor,n2_cor); + pdfCB_cor.fitTo(*hdata2,Range(0.9,1.1)); + h_gaussian_cor->AddBinContent(i+1,100.*sig_cor.getVal()); + h_gaussian_cor->SetBinError(i+1,100.*sig_cor.getError()); + + RooDataSet *hdata3 = (RooDataSet*)hdata_reduced->reduce(*rawvar); + RooRealVar mean_raw("mean_raw","mean_raw",1.,0.9,1.1); + RooRealVar sig_raw("sig_raw","sig_raw",0.01,0.0002,0.8); + RooRealVar a1_raw("a1_raw","a1_raw",3,0.05,10); + RooRealVar a2_raw("a2_raw","a2_raw",3,0.05,10); + RooRealVar n1_raw("n1_raw","n1_raw",3,1.01,500); + RooRealVar n2_raw("n2_raw","n2_raw",3,1.01,500); + RooDoubleCBFast pdfCB_raw("pdfCB_raw","pdfCB_raw",*rawvar,mean_raw,sig_raw,a1_raw,n1_raw,a2_raw,n2_raw); + pdfCB_raw.fitTo(*hdata3,Range(0.6,1.1)); + + h_gaussian_raw->AddBinContent(i+1,100.*sig_raw.getVal()); + h_gaussian_raw->SetBinError(i+1,100.*sig_raw.getError()); + + + //----------------------------------------------------------------------------------- + ccor->cd(i+1); + + RooPlot *plot = ecorvar->frame(0.9,1.1, 250); + plot->SetTitle("Distribution of cor/true "+str); + plot->GetXaxis()->SetTitle("cor/true"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata_reduced->plotOn(plot,Name("MC_sample_cor")); + pdfCB_cor.plotOn(plot,Name("corrected"),LineColor(kRed)); + plot->Draw(); + TLegend *legend = new TLegend(0.8,0.8,0.9,0.9); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("MC_sample_cor","MC Sample cor","P"); + legend->AddEntry("corrected","fit","l"); + legend->Draw(); + + craw->cd(i+1); + + //RooPlot *plot3 = rawvar->frame(0.15,0.4, 250); + RooPlot *plot3 = rawvar->frame(0.9,1.1, 250); + plot3->SetTitle("Distribution of raw/true "+str); + plot3->GetXaxis()->SetTitle("raw/true"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata_reduced->plotOn(plot3,Name("MC_sample_raw")); + pdfCB_raw.plotOn(plot3,Name("raw"),LineColor(kRed)); + plot3->Draw(); + TLegend *legend2 = new TLegend(0.8,0.8,0.9,0.9); + legend2->SetFillColor(kWhite); + legend2->SetLineColor(kWhite); + legend2->AddEntry("MC_sample_raw","MC Sample raw","P"); + legend2->AddEntry("cfit_raw","fit","l"); + legend2->Draw(); + + + + + } + //craw->SaveAs("resolution_vs_"+arg_variable+"_fit_raw"+add_to_pngFileName); + //ccor->SaveAs("resolution_vs_"+arg_variable+"_fit_cor"+add_to_pngFileName); + + c_reso->cd(); + gPad->SetGridx(); + gPad->SetGridy(); + gStyle->SetOptStat(0); + + h_gaussian_cor->GetYaxis()->SetRangeUser(0.,2.5); + h_gaussian_cor->GetXaxis()->SetRangeUser(xmin,xmax); + h_gaussian_cor->GetYaxis()->SetTitle("Resolution (%)"); + h_gaussian_cor->GetYaxis()->SetTitleOffset(1.7); + h_gaussian_cor->GetXaxis()->SetTitle(nameXaxis); + h_gaussian_cor->SetTitle("Barrel"); + h_gaussian_cor->SetMarkerStyle(22); // + h_gaussian_cor->SetMarkerColor(kBlue); + h_gaussian_cor->SetLineColor(kBlue); + h_gaussian_cor->SetName("h_gaussian_cor"); + h_gaussian_cor->Draw("e p"); + + h_gaussian_raw->SetMarkerStyle(20); + h_gaussian_raw->SetMarkerColor(kRed); + h_gaussian_raw->SetLineColor(kRed); + h_gaussian_raw->SetName("h_gaussian_raw"); + h_gaussian_raw->Draw("e same"); + + h_raw->SetMarkerStyle(24); + h_raw->SetMarkerColor(kRed); + h_raw->SetLineColor(kRed); + h_raw->SetName("h_raw"); + h_raw->Draw("p same"); + + h_cor->SetMarkerStyle(26); // + h_cor->SetMarkerColor(kBlue); + h_cor->SetLineColor(kBlue); + h_cor->SetName("h_cor"); + h_cor->Draw("p same"); + + TLegend *legend = new TLegend(0.51,0.11,0.89,0.25); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("h_gaussian_raw","raw/true CB width","p"); + legend->AddEntry("h_gaussian_cor","cor/true CB width","p"); + legend->AddEntry("h_raw","raw/true effective sigma","p"); + legend->AddEntry("h_cor","cor/true effective sigma","p"); + + + legend->Draw("same"); + +} + +Double_t effSigma(TH1 * hist) +{ + + TAxis *xaxis = hist->GetXaxis(); + Int_t nb = xaxis->GetNbins(); + if(nb < 10) + { + cout << "effsigma: Not a valid histo. nbins = " << nb << endl; + return 0.; + } + + Double_t bwid = xaxis->GetBinWidth(1); + if(bwid == 0) + { + cout << "effsigma: Not a valid histo. bwid = " << bwid << endl; + return 0.; + } + Double_t xmax = xaxis->GetXmax(); + Double_t xmin = xaxis->GetXmin(); + Double_t ave = hist->GetMean(); + Double_t rms = hist->GetRMS(); + + Double_t total=0.; + for(Int_t i=0; iGetBinContent(i); + } +// if(total < 100.) { +// cout << "effsigma: Too few entries " << total << endl; +// return 0.; +// } + Int_t ierr=0; + Int_t ismin=999; + + Double_t rlim=0.683*total; + Int_t nrms=rms/(bwid); // Set scan size to +/- rms + if(nrms > nb/10) nrms=nb/10; // Could be tuned... + + Double_t widmin=9999999.; + for(Int_t iscan=-nrms;iscanGetBinContent(ibm); + total=bin; + for(Int_t j=1;jGetBinContent(jbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + if(kbm > 0) + { + kbm--; + xk-=bwid; + bin=hist->GetBinContent(kbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + } + Double_t dxf=(total-rlim)*bwid/bin; + Double_t wid=(xj-xk+bwid-dxf)*0.5; + if(wid < widmin) + { + widmin=wid; + ismin=iscan; + } + } + if(ismin == nrms || ismin == -nrms) ierr=3; + if(ierr != 0) cout << "effsigma: Error of type " << ierr << endl; + + return widmin; + +} + diff --git a/macros/examples/resolution_effsigmaCB_RawCor_notLog.C b/macros/examples/resolution_effsigmaCB_RawCor_notLog.C new file mode 100644 index 0000000..6c05492 --- /dev/null +++ b/macros/examples/resolution_effsigmaCB_RawCor_notLog.C @@ -0,0 +1,474 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "TH2.h" +#include "TProfile.h" +#include "TStyle.h" +#include "TGaxis.h" +#include "TGraphErrors.h" + +using namespace RooFit; + +//effsigma function from Chris +Double_t effSigma(TH1 * hist); + +//function that fit the energy ratio with a gaussian and plot the result for both raw/true and cor/true distributions +void plot_resolution(TString arg_variable, Double_t xmin, Double_t xmax, Int_t nbins, Double_t* xbins, Double_t step, Double_t init, TString nameXaxis, TString add_to_pngFileName, RooDataSet* hdata, RooRealVar* rawvar, RooRealVar* ecorvar, TCanvas* c_reso); + +void resolution_effsigmaCB_RawCor_notLog(bool dobarrel=true, bool weighted=false) { + + //output dir + TString dirname = "ereg_sig3_evenOddEvts_alpha15-14_endcap/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + TCut cutUsed = "(event%2==1)"; + + //read workspace from training + TString fname; //name of the training output file + TString add_to_pngFileName, add_to_rootFileName; //extension of root and png files + + if (dobarrel) + { + fname = "wereg_ph_eb.root"; + add_to_pngFileName = "_eb.png"; + add_to_rootFileName = "_eb.root"; + } + else + { + fname = "wereg_ph_ee.root"; + add_to_pngFileName = "_ee.png"; + add_to_rootFileName = "_ee.root"; + } + add_to_rootFileName = add_to_rootFileName; //add particular info in file name + add_to_pngFileName = add_to_pngFileName; + + //Workspace + TString infile = TString::Format("./%s",fname.Data()); + TFile *fws = TFile::Open(infile); + RooWorkspace *ws = (RooWorkspace*)fws->Get("wereg"); + + //read variables from workspace + RooGBRTargetFlex *meantgt = static_cast(ws->arg("sigmeant")); + RooRealVar *tgtvar = ws->var("tgtvar"); + RooRealVar *etrue = new RooRealVar("etrue","etrue",0.); + RooRealVar *scRawEnergy = new RooRealVar("scRawEnergy","scRawEnergy",0.); + //RooRealVar *maxEnergyXtal = new RooRealVar("maxEnergyXtal","maxEnergyXtal",0.); + + RooArgList vars; + vars.add(meantgt->FuncVars()); + vars.add(*tgtvar); + vars.add(*etrue); + vars.add(*scRawEnergy); + //vars.add(*maxEnergyXtal); + + + //read testing dataset from TTree + RooRealVar weightvar("weightvar","",1.); + + TTree *dtree; + + TFile *fTree = TFile::Open("/afs/cern.ch/user/m/musella/public/forKenza/gam_gam_phys14_v5_regtraining_v3.root"); // + dtree = (TTree*)fTree->Get("promptTree"); + /*if(true_energy) { + if(!weighted) { + dtree->Draw("etrue>>h1"); + dtree->Draw("scEta>>h2","etrue<=2500"); + dtree->Draw("scEta>>h3","etrue>2500 && etrue<=3000"); + dtree->Draw("scEta>>h4","etrue>3000 && etrue<=5000"); + } + else { + dtree->Draw("etrue>>h1","weight"); + dtree->Draw("scEta>>h2","weight*(etrue<=2500)"); + dtree->Draw("scEta>>h3","weight*(etrue>2500 && etrue<=3000)"); + dtree->Draw("scEta>>h4","weight*(etrue>3000 && etrue<=5000)"); + } + } + else { + if(!weighted) { + dtree->Draw("energy>>h1","pt>250. && kSaturated[12]==1 && abs(scEta)<=1.5 && abs(ieta[12])!=1 && abs(ieta[12])!=25 && abs(ieta[12])!=26 && abs(ieta[12])!=45 && abs(ieta[12])!=46 && abs(ieta[12])!=65 && abs(ieta[12])!=66 && abs(ieta[12])!=85"); + //dtree->Draw("scEta>>h2","pt<=2000"); + //dtree->Draw("scEta>>h3","pt>2000 && pt<=3000"); + //dtree->Draw("scEta>>h4","pt>3000 && pt<=5000"); + } + else { + dtree->Draw("pt>>h1","weight"); + dtree->Draw("scEta>>h2","weight*(pt<=2500)"); + dtree->Draw("scEta>>h3","weight*(pt>2500 && pt<=3000)"); + dtree->Draw("scEta>>h4","weight*(pt>3000 && pt<=5000)"); + } + }*/ + //dtree->Draw("etrue>>h5","weight*(pt<=2000)"); + //dtree->Draw("etrue>>h6","weight*(pt>2000 && pt<=3500)"); + //dtree->Draw("etrue>>h7","weight*(pt>3500 && pt<=5000)"); + //selection cuts for testing + TCut selcut; + + if (dobarrel) + selcut = "pt>250. && kSaturated[12]!=1 && abs(scEta)<1.5"; + else + selcut = "pt>250. && kSaturated[12]!=1 && abs(scEta)>1.5"; + + + TCut selweight; + if(weighted) + selweight= "(weight)"; + else + selweight= "(1.)"; + + + //weightvar.SetTitle(cutUsed*selcut); + weightvar.SetTitle(cutUsed*selcut*selweight); + + //create the testing dataset + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",dtree,vars,weightvar); + + //retrieve full pdf from workspace + //RooAbsPdf *sigpdf = ws->pdf("sigpdf"); + + //regressed output functions + RooAbsReal *sigmeanlim = ws->function("sigmeanlim"); + //RooAbsReal *sigwidthlim = ws->function("sigwidthlim"); + + + RooRealVar *pt; + RooRealVar *scetavar = ws->var("var_1"); + if(dobarrel) + scetavar->setRange(-1.5,1.5); + else + scetavar->setRange(-3.,3.); + + if(!dobarrel) { + RooRealVar *preshowerEnergy = ws->var("var_28"); + //formula for Pt corrected_energy/Cosh(eta) = ecorvar*tgtvar*rawvar/cosh(eta) + RooFormulaVar ptFormula("pt","","@0*(1+@1)*1./(cosh(@2))",RooArgList(*scRawEnergy,*preshowerEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(250.,5000); // + } + else { + RooFormulaVar ptFormula("pt","","@0*1./(cosh(@1))",RooArgList(*etrue,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(250.,5000); // + } + + + //create xbins that contains the fit slices limits + Int_t nbins=10; + Double_t *xbins=0, step, init=250; + + if (dobarrel) + step = 500; + else + step = 225; + + xbins = (Double_t*)malloc(sizeof(Double_t)*(nbins+1)); + + for(int ii=0;ii<=nbins; ii++) { + xbins[ii]=init+step*ii; + } + + + //formula for corrected energy/true energy ( 1.0/(etrue/eraw) * regression mean) + RooFormulaVar ecor("ecor","","1./(@0)*(@1)",RooArgList(*tgtvar,*sigmeanlim)); + RooRealVar *ecorvar = (RooRealVar*)hdata->addColumn(ecor); + ecorvar->setRange(0.6,1.2); + ecorvar->setBins(800); + + //formula for raw energy/true energy + RooFormulaVar raw("raw","","1./(@0)",RooArgList(*tgtvar)); + RooRealVar *rawvar = (RooRealVar*)hdata->addColumn(raw); + rawvar->setRange(0.6,1.2); + rawvar->setBins(800); + + TCanvas *c_reso = new TCanvas("c_reso","",800,800); + + plot_resolution("etrue",0.,5000.,nbins, xbins, step, init, "photon true energy (GeV)", add_to_pngFileName, hdata, rawvar,ecorvar, c_reso); + c_reso->SaveAs("resolution_vs_etrue.png"); + + //plot_resolution("etrue",0.,5000.,nbins, xbins, step, init, "pT (GeV)", add_to_pngFileName, hdata, rawvar,ecorvar, c_reso); + //c_reso->SaveAs("resolution_vs_pt.png"); +} +void plot_resolution(TString arg_variable, Double_t xmin, Double_t xmax, Int_t nbins, Double_t* xbins, Double_t step, Double_t init, TString nameXaxis, TString add_to_pngFileName, RooDataSet* hdata, RooRealVar* rawvar, RooRealVar* ecorvar, TCanvas* c_reso) +{ + + TString str1, str2, str3, str4, variable, str; + TH1F* h_gaussian_raw = new TH1F("h_gaussian_raw","",nbins,xbins); + TH1F* h_gaussian_cor = new TH1F("h_gaussian_cor","",nbins,xbins); + + TH1F* h_raw = new TH1F("h_raw"," ",nbins,xbins); + TH1F* h_cor = new TH1F("h_cor"," ",nbins,xbins); + + TCanvas *craw = new TCanvas("craw","craw"); //------------------------------------------------------------CANVAS + craw->Divide(5,2); + TCanvas *ccor = new TCanvas("ccor","ccor"); //------------------------------------------------------------CANVAS + ccor->Divide(5,2); + + for(Int_t i=0; i"+str4+"+("+str3+"*"+str1+") && "+variable+"<"+str4+"+("+str3+"*"+str2+") "; + + hdata_reduced = (RooDataSet*)hdata->reduce(str); + + //compute effective sigma + TH1 *hecor = hdata_reduced->createHistogram("hecor",*ecorvar,Binning(20e3,0.,4.)); + TH1 *hraw = hdata_reduced->createHistogram("hraw",*rawvar,Binning(20e3,0.,4.)); + + + printf("calc effsigma\n"); + double effsigmaCor=(effSigma(hecor)); + double effsigmaRaw=(effSigma(hraw)); + printf("raw = %5f - corr = %5f\n",effsigmaRaw,effsigmaCor); + if(!std::isnormal(effsigmaCor) || !std::isnormal(effsigmaRaw)) continue; + h_raw->AddBinContent(i+1,100.*effsigmaRaw); + h_cor->AddBinContent(i+1,100.*effsigmaCor); + + RooDataSet *hdata2 = (RooDataSet*)hdata_reduced->reduce(*ecorvar); + RooRealVar mean_cor("mean_cor","mean_cor",1,0.9,1.1); + RooRealVar sig_cor("sig_cor","sig_cor",0.01,0.0002,0.8); + RooRealVar a1_cor("a1_cor","a1_cor",3,0.05,10); + RooRealVar a2_cor("a2_cor","a2_cor",3,0.05,10); + RooRealVar n1_cor("n1_cor","n1_cor",3,1.01,500); + RooRealVar n2_cor("n2_cor","n2_cor",3,1.01,500); + + RooDoubleCBFast pdfCB_cor("pdfCB_cor","pdfCB_cor",*ecorvar,mean_cor,sig_cor,a1_cor,n1_cor,a2_cor,n2_cor); + pdfCB_cor.fitTo(*hdata2,Range(0.9,1.1)); + h_gaussian_cor->AddBinContent(i+1,100.*sig_cor.getVal()); + h_gaussian_cor->SetBinError(i+1,sig_cor.getError()); + + RooDataSet *hdata3 = (RooDataSet*)hdata_reduced->reduce(*rawvar); + RooRealVar mean_raw("mean_raw","mean_raw",1.,0.9,1.1); + RooRealVar sig_raw("sig_raw","sig_raw",0.01,0.0002,0.8); + RooRealVar a1_raw("a1_raw","a1_raw",3,0.05,10); + RooRealVar a2_raw("a2_raw","a2_raw",3,0.05,10); + RooRealVar n1_raw("n1_raw","n1_raw",3,1.01,500); + RooRealVar n2_raw("n2_raw","n2_raw",3,1.01,500); + RooDoubleCBFast pdfCB_raw("pdfCB_raw","pdfCB_raw",*rawvar,mean_raw,sig_raw,a1_raw,n1_raw,a2_raw,n2_raw); + pdfCB_raw.fitTo(*hdata3,Range(0.9,1.1)); + + h_gaussian_raw->AddBinContent(i+1,100.*sig_raw.getVal()); + h_gaussian_raw->SetBinError(i+1,sig_raw.getError()); + + + //----------------------------------------------------------------------------------- + ccor->cd(i+1); + + RooPlot *plot = ecorvar->frame(0.9,1.1, 250); + plot->SetTitle("Distribution of cor/true "+str); + plot->GetXaxis()->SetTitle("cor/true"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata_reduced->plotOn(plot,Name("MC_sample_cor")); + pdfCB_cor.plotOn(plot,Name("corrected"),LineColor(kRed)); + plot->Draw(); + TLegend *legend = new TLegend(0.8,0.8,0.9,0.9); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("MC_sample_cor","MC Sample cor","P"); + legend->AddEntry("corrected","fit","l"); + legend->Draw(); + + craw->cd(i+1); + + //RooPlot *plot3 = rawvar->frame(0.15,0.4, 250); + RooPlot *plot3 = rawvar->frame(0.9,1.1, 250); + plot3->SetTitle("Distribution of raw/true "+str); + plot3->GetXaxis()->SetTitle("raw/true"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata_reduced->plotOn(plot3,Name("MC_sample_raw")); + pdfCB_raw.plotOn(plot3,Name("raw"),LineColor(kRed)); + plot3->Draw(); + TLegend *legend2 = new TLegend(0.8,0.8,0.9,0.9); + legend2->SetFillColor(kWhite); + legend2->SetLineColor(kWhite); + legend2->AddEntry("MC_sample_raw","MC Sample raw","P"); + legend2->AddEntry("cfit_raw","fit","l"); + legend2->Draw(); + + + + + } + craw->SaveAs("resolution_vs_"+arg_variable+"_fit_raw"+add_to_pngFileName); + ccor->SaveAs("resolution_vs_"+arg_variable+"_fit_cor"+add_to_pngFileName); + + c_reso->cd(); + gPad->SetGridx(); + gPad->SetGridy(); + gStyle->SetOptStat(0); + + h_gaussian_cor->GetYaxis()->SetRangeUser(0.5,4.); + h_gaussian_cor->GetXaxis()->SetRangeUser(xmin,xmax); + h_gaussian_cor->GetYaxis()->SetTitle("resolution"); + h_gaussian_cor->GetYaxis()->SetTitleOffset(1.55); + h_gaussian_cor->GetXaxis()->SetTitle(nameXaxis); + + h_gaussian_cor->SetMarkerStyle(22); + h_gaussian_cor->SetMarkerColor(kBlue); + h_gaussian_cor->SetLineColor(kBlue); + h_gaussian_cor->SetName("h_gaussian_cor"); + h_gaussian_cor->Draw("e p"); + + h_gaussian_raw->SetMarkerStyle(20); + h_gaussian_raw->SetMarkerColor(kRed); + h_gaussian_raw->SetLineColor(kRed); + h_gaussian_raw->SetName("h_gaussian_raw"); + h_gaussian_raw->Draw("e same"); + + h_raw->SetMarkerStyle(20); + h_raw->SetMarkerColor(kMagenta); + h_raw->SetLineColor(kMagenta); + h_raw->SetName("h_raw"); + h_raw->Draw("p same"); + + h_cor->SetMarkerStyle(23); + h_cor->SetMarkerColor(kBlack); + h_cor->SetLineColor(kBlack); + h_cor->SetName("h_cor"); + h_cor->Draw("p same"); + + TLegend *legend = new TLegend(0.11,0.8,0.4,0.89); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("h_gaussian_raw","raw/true CB width","p"); + legend->AddEntry("h_gaussian_cor","cor/true CB width","p"); + legend->AddEntry("h_raw","raw/true effective sigma","p"); + legend->AddEntry("h_cor","cor/true effective sigma","p"); + + + legend->Draw("same"); + +} + +Double_t effSigma(TH1 * hist) +{ + + TAxis *xaxis = hist->GetXaxis(); + Int_t nb = xaxis->GetNbins(); + if(nb < 10) + { + cout << "effsigma: Not a valid histo. nbins = " << nb << endl; + return 0.; + } + + Double_t bwid = xaxis->GetBinWidth(1); + if(bwid == 0) + { + cout << "effsigma: Not a valid histo. bwid = " << bwid << endl; + return 0.; + } + Double_t xmax = xaxis->GetXmax(); + Double_t xmin = xaxis->GetXmin(); + Double_t ave = hist->GetMean(); + Double_t rms = hist->GetRMS(); + + Double_t total=0.; + for(Int_t i=0; iGetBinContent(i); + } +// if(total < 100.) { +// cout << "effsigma: Too few entries " << total << endl; +// return 0.; +// } + Int_t ierr=0; + Int_t ismin=999; + + Double_t rlim=0.683*total; + Int_t nrms=rms/(bwid); // Set scan size to +/- rms + if(nrms > nb/10) nrms=nb/10; // Could be tuned... + + Double_t widmin=9999999.; + for(Int_t iscan=-nrms;iscanGetBinContent(ibm); + total=bin; + for(Int_t j=1;jGetBinContent(jbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + if(kbm > 0) + { + kbm--; + xk-=bwid; + bin=hist->GetBinContent(kbm); + total+=bin; + if(total > rlim) break; + } + else ierr=1; + } + Double_t dxf=(total-rlim)*bwid/bin; + Double_t wid=(xj-xk+bwid-dxf)*0.5; + if(wid < widmin) + { + widmin=wid; + ismin=iscan; + } + } + if(ismin == nrms || ismin == -nrms) ierr=3; + if(ierr != 0) cout << "effsigma: Error of type " << ierr << endl; + + return widmin; + +} + diff --git a/macros/examples/scale_fitMean_RawCor.C b/macros/examples/scale_fitMean_RawCor.C new file mode 100644 index 0000000..e774200 --- /dev/null +++ b/macros/examples/scale_fitMean_RawCor.C @@ -0,0 +1,427 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "TH2.h" +#include "TProfile.h" +#include "TStyle.h" +#include "TGaxis.h" +#include "TGraphErrors.h" + +using namespace RooFit; + +//function that fit the mean with a gaussian and plot the result for both raw/true and cor/true distributions +void fit_and_plot_mean(Bool_t dobarrel,RooRealVar* pt,int number, TString arg_variable, Double_t xmin, Double_t xmax, Int_t nbins, Double_t* xbins, Double_t step, Double_t init, TString nameXaxis, TString add_to_pngFileName, RooDataSet* hdata, RooRealVar* rawvar, RooRealVar* ecorvar, TCanvas* c_mean); + +void scale_fitMean_RawCor(bool dobarrel=true, bool weighted=false) { + + //output dir + TString dirname = "Barrel_Log_sig3_alpha2-3_evts15/"; + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + TCut cutUsed = "(event%15==1)"; + + //read workspace from training + TString fname; //name of the training output file + TString add_to_pngFileName, add_to_rootFileName; //extension of root and png files + + if (dobarrel) + { + fname = "wereg_ph_eb.root"; + add_to_pngFileName = "_eb.png"; + add_to_rootFileName = "_eb.root"; + } + else + { + fname = "wereg_ph_ee.root"; + add_to_pngFileName = "_ee.png"; + add_to_rootFileName = "_ee.root"; + } + add_to_rootFileName = add_to_rootFileName; //add particular info in file name + add_to_pngFileName = add_to_pngFileName; + + //Workspace + TString infile = TString::Format("./%s",fname.Data()); + TFile *fws = TFile::Open(infile); + RooWorkspace *ws = (RooWorkspace*)fws->Get("wereg"); + + //read variables from workspace + RooGBRTargetFlex *meantgt = static_cast(ws->arg("sigmeant")); + RooRealVar *tgtvar = ws->var("tgtvar"); + RooRealVar *etrue = new RooRealVar("etrue","etrue",0.); + RooRealVar *scRawEnergy = new RooRealVar("scRawEnergy","scRawEnergy",0.); + RooRealVar *r9 = new RooRealVar("nvtx","nvtx",0.); + //RooRealVar *maxEnergyXtal = new RooRealVar("maxEnergyXtal","maxEnergyXtal",0.); + + RooArgList vars; + vars.add(meantgt->FuncVars()); + vars.add(*tgtvar); + vars.add(*etrue); + vars.add(*scRawEnergy); + vars.add(*r9); + //vars.add(*maxEnergyXtal); + + + //read testing dataset from TTree + RooRealVar weightvar("weightvar","",1.); + + TChain *dtree; + dtree = new TChain("promptTree"); + dtree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-300To3000.root"); + dtree->Add("/afs/cern.ch/work/k/khoumani/CMSSW_7_2_3/src/HiggsAnalysis/GBRLikelihood/macros/examples/promptTree_FlatPt-5To300_lessstat.root"); + + /*if(true_energy) { + if(!weighted) { + dtree->Draw("etrue>>h1"); + dtree->Draw("scEta>>h2","etrue<=2500"); + dtree->Draw("scEta>>h3","etrue>2500 && etrue<=3000"); + dtree->Draw("scEta>>h4","etrue>3000 && etrue<=5000"); + } + else { + dtree->Draw("etrue>>h1","weight"); + dtree->Draw("scEta>>h2","weight*(etrue<=2500)"); + dtree->Draw("scEta>>h3","weight*(etrue>2500 && etrue<=3000)"); + dtree->Draw("scEta>>h4","weight*(etrue>3000 && etrue<=5000)"); + } + } + else { + if(!weighted) { + dtree->Draw("energy>>h1","pt>250. && kSaturated[12]==1 && abs(scEta)<=1.5 && abs(ieta[12])!=1 && abs(ieta[12])!=25 && abs(ieta[12])!=26 && abs(ieta[12])!=45 && abs(ieta[12])!=46 && abs(ieta[12])!=65 && abs(ieta[12])!=66 && abs(ieta[12])!=85"); + //dtree->Draw("scEta>>h2","pt<=2000"); + //dtree->Draw("scEta>>h3","pt>2000 && pt<=3000"); + //dtree->Draw("scEta>>h4","pt>3000 && pt<=5000"); + } + else { + dtree->Draw("pt>>h1","weight"); + dtree->Draw("scEta>>h2","weight*(pt<=2500)"); + dtree->Draw("scEta>>h3","weight*(pt>2500 && pt<=3000)"); + dtree->Draw("scEta>>h4","weight*(pt>3000 && pt<=5000)"); + } + }*/ + //dtree->Draw("etrue>>h5","weight*(pt<=2000)"); + //dtree->Draw("etrue>>h6","weight*(pt>2000 && pt<=3500)"); + //dtree->Draw("etrue>>h7","weight*(pt>3500 && pt<=5000)"); + //selection cuts for testing + TCut selcut; + + if (dobarrel) + selcut = "etrue*pt/energy >=250. && etrue*pt/energy<=3000 && abs(scEta)<1.5 && kSaturated[12]!=1 && (eMax/e2nd-1)<0.3"; + else + selcut = "etrue*pt/energy >=250. && etrue*pt/energy<=3000 && abs(scEta)>1.5 && kSaturated[12]!=1 "; + + + TCut selweight; + if(weighted) + selweight= "(weight)"; + else + selweight= "(1.)"; + + + //weightvar.SetTitle(cutUsed*selcut); + weightvar.SetTitle(cutUsed*selcut*selweight); + + //create the testing dataset + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",dtree,vars,weightvar); + + //retrieve full pdf from workspace + //RooAbsPdf *sigpdf = ws->pdf("sigpdf"); + + //regressed output functions + RooAbsReal *sigmeanlim = ws->function("sigmeanlim"); + //RooAbsReal *sigwidthlim = ws->function("sigwidthlim"); + + r9->setRange(0.,40.); + RooRealVar *pt; + RooRealVar *scetavar = ws->var("var_1"); + // RooRealVar *r9=ws->var("var_3"); + //r9->setRange(0.75,1.); + if(dobarrel) + scetavar->setRange(-1.5,1.5); + else + scetavar->setRange(-3,3); + + if(!dobarrel) { + RooRealVar *preshowerEnergy = ws->var("var_28"); + //formula for Pt true_energy/Cosh(eta) = tgtvar*rawvar/cosh(eta) + RooFormulaVar ptFormula("pt","","exp(@0)*@1*(1+@2)*1./(cosh(@3))",RooArgList(*tgtvar,*scRawEnergy,*preshowerEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(250.,5000); // + } + else { + RooFormulaVar ptFormula("pt","","exp(@0)*@1*1./(cosh(@2))",RooArgList(*tgtvar,*scRawEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(250.,5000); // + } + + + //create xbins that contains the fit slices limits + Int_t nbins=10; + + Double_t *xbins=0, step, init=0; + + step = 500.; + + xbins = (Double_t*)malloc(sizeof(Double_t)*(nbins+1)); + for(int ii=0;ii<=nbins; ii++) { + xbins[ii]=init+step*ii; + } + + + //formula for corrected energy/true energy ( 1.0/(etrue/eraw) * regression mean) + //RooFormulaVar ecor("ecor","","1./exp(@0)*exp(@1)",RooArgList(*tgtvar,*sigmeanlim)); + RooFormulaVar ecor("ecor","","1./exp(@0)*exp(@1)",RooArgList(*tgtvar,*sigmeanlim)); + RooRealVar *ecorvar = (RooRealVar*)hdata->addColumn(ecor); + ecorvar->setRange(0.,2); + ecorvar->setBins(800); + + //formula for raw energy/true energy + //RooFormulaVar raw("raw","","1./exp(@0)",RooArgList(*tgtvar)); + RooFormulaVar raw("raw","","1./exp(@0)",RooArgList(*tgtvar)); + RooRealVar *rawvar = (RooRealVar*)hdata->addColumn(raw); + rawvar->setRange(0.,2.); + rawvar->setBins(800); + + TCanvas *c_mean = new TCanvas("c_mean","c_mean",800,800); + + fit_and_plot_mean(dobarrel,pt, 1,"pt",0.,5000.,nbins, xbins, step, init, "pT (GeV)", add_to_pngFileName, hdata, rawvar,ecorvar, c_mean); + c_mean->SaveAs("scale_vs_pt_CMS2.png"); + c_mean->SaveAs("scale_vs_pt_CMS2.root"); + + // TCanvas *c_nvtx = new TCanvas("c_nvtx","c_nvtx",800,800); + //fit_and_plot_mean(dobarrel,nvtx, 1,"nvtx",0.,40.,nbins, xbins, step, init, "nvtx", add_to_pngFileName, hdata, rawvar,ecorvar, c_mean); + /* nbins=10; + init=0; + step = 40; + + Double_t *xbins2=0; + + xbins2 = (Double_t*)malloc(sizeof(Double_t)*(nbins+1)); + for(int ii=0;ii<=nbins; ii++) { + xbins2[ii]=init+step*ii; + } + + //TCanvas *c_r9 = new TCanvas("c_r9","c_r9",800,800); + fit_and_plot_mean(dobarrel,r9,0,"nvtx",1,40,nbins, xbins2, step, init, "R_{9}", add_to_pngFileName, hdata, rawvar,ecorvar, c_mean); + + c_mean->SaveAs("scale_vs_r9.png");*/ +} +void fit_and_plot_mean(Bool_t dobarrel, RooRealVar* pt, int number, TString arg_variable, Double_t xmin, Double_t xmax, Int_t nbins, Double_t* xbins, Double_t step, Double_t init, TString nameXaxis, TString add_to_pngFileName, RooDataSet* hdata, RooRealVar* rawvar, RooRealVar* ecorvar, TCanvas* c_mean) +{ + + TString str1, str2, str3, str4, variable, str; + TH1F* h_gaussian_raw = new TH1F("h_gaussian_raw","",nbins,xbins); + TH1F* h_gaussian_cor = new TH1F("h_gaussian_cor","",nbins,xbins); + + TH2 *h2D_average_cor, *h2D_average_raw; + h2D_average_cor = hdata->createHistogram(*pt,*ecorvar); + h2D_average_raw = hdata->createHistogram(*pt,*rawvar); + + TProfile *h1D_average_cor = h2D_average_cor->ProfileX(); + TProfile *h1D_average_raw = h2D_average_raw->ProfileX(); + + //h1D_average_cor->SetErrorOption("s"); + h1D_average_cor->Rebin(nbins,"hprof_cor",xbins); + TProfile *hprof_cor=(TProfile*)gDirectory->Get("hprof_cor"); + //h1D_average_raw->SetErrorOption("s"); + h1D_average_raw->Rebin(nbins,"hprof_raw",xbins); + + TProfile *hprof_raw=(TProfile*)gDirectory->Get("hprof_raw"); + + TCanvas *craw = new TCanvas("craw","craw"); //------------------------------------------------------------CANVAS + craw->Divide(5,2); + TCanvas *ccor = new TCanvas("ccor","ccor"); //------------------------------------------------------------CANVAS + ccor->Divide(5,2); + + for(Int_t i=0; i ("+str4+"+("+str3+"*"+str1+")) && "+variable+"< ("+str4+"+("+str3+"*"+str2+")) "; + + hdata_reduced = (RooDataSet*)hdata->reduce(str); + + RooDataSet *hdata2 = (RooDataSet*)hdata_reduced->reduce(*ecorvar); + RooRealVar mean_cor("mean_cor","mean_cor",1,0.9,1.1); + RooRealVar sig_cor("sig_cor","sig_cor",0.01,0.0002,0.8); + RooRealVar a1_cor("a1_cor","a1_cor",3,0.05,10); + RooRealVar a2_cor("a2_cor","a2_cor",3,0.05,10); + RooRealVar n1_cor("n1_cor","n1_cor",3,1.01,500); + RooRealVar n2_cor("n2_cor","n2_cor",3,1.01,500); + + RooDoubleCBFast pdfCB_cor("pdfCB_cor","pdfCB_cor",*ecorvar,mean_cor,sig_cor,a1_cor,n1_cor,a2_cor,n2_cor); + cout << "dcb corrected" << endl; + pdfCB_cor.fitTo(*hdata2,Range(0.9,1.1)); + h_gaussian_cor->AddBinContent(i+1,mean_cor.getVal()); + h_gaussian_cor->SetBinError(i+1,mean_cor.getError()); + cout << "histogram corrected filled" << endl; + RooDataSet *hdata3 = (RooDataSet*)hdata_reduced->reduce(*rawvar); + RooRealVar mean_raw("mean_raw","mean_raw",1.,0.9,1.1); + RooRealVar sig_raw("sig_raw","sig_raw",0.01,0.0002,0.8); + RooRealVar a1_raw("a1_raw","a1_raw",3,0.05,10); + RooRealVar a2_raw("a2_raw","a2_raw",3,0.05,10); + RooRealVar n1_raw("n1_raw","n1_raw",3,1.01,500); + RooRealVar n2_raw("n2_raw","n2_raw",3,1.01,500); + RooDoubleCBFast pdfCB_raw("pdfCB_raw","pdfCB_raw",*rawvar,mean_raw,sig_raw,a1_raw,n1_raw,a2_raw,n2_raw); + cout << "dcb raw" << endl; + pdfCB_raw.fitTo(*hdata3,Range(0.9,1.1)); + + h_gaussian_raw->AddBinContent(i+1,mean_raw.getVal()); + h_gaussian_raw->SetBinError(i+1,mean_raw.getError()); + cout << "histogram raw filled" << endl; + + //----------------------------------------------------------------------------------- + cout << "start plotting 1" << endl; + ccor->cd(i+1); + + RooPlot *plot = ecorvar->frame(0.,2, 250); + plot->SetTitle("Distribution of cor/true "+str); + plot->GetXaxis()->SetTitle("cor/true"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata_reduced->plotOn(plot,Name("MC_sample_cor")); + pdfCB_cor.plotOn(plot,Name("corrected"),LineColor(kRed)); + plot->Draw(); + TLegend *legend = new TLegend(0.8,0.8,0.9,0.9); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("MC_sample_cor","MC Sample cor","P"); + legend->AddEntry("corrected","fit","l"); + legend->Draw(); + + craw->cd(i+1); + cout << "start plotting 2" << endl; + //RooPlot *plot3 = rawvar->frame(0.15,0.4, 250); + RooPlot *plot3 = rawvar->frame(0.,2, 250); + plot3->SetTitle("Distribution of raw/true "+str); + plot3->GetXaxis()->SetTitle("raw/true"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata_reduced->plotOn(plot3,Name("MC_sample_raw")); + pdfCB_raw.plotOn(plot3,Name("raw"),LineColor(kRed)); + plot3->Draw(); + TLegend *legend2 = new TLegend(0.8,0.8,0.9,0.9); + legend2->SetFillColor(kWhite); + legend2->SetLineColor(kWhite); + legend2->AddEntry("MC_sample_raw","MC Sample raw","P"); + legend2->AddEntry("cfit_raw","fit","l"); + legend2->Draw(); + + } + cout << "Save plots of slices fits" << endl; + craw->SaveAs("scale_vs_"+arg_variable+"_fit_raw"+add_to_pngFileName); + ccor->SaveAs("scale_vs_"+arg_variable+"_fit_cor"+add_to_pngFileName); + + c_mean->cd(); + gPad->SetGridx(); + gPad->SetGridy(); + gStyle->SetOptStat(0); + + hprof_raw->SetMarkerStyle(26); + hprof_raw->SetMarkerColor(kRed); + hprof_raw->SetLineColor(kRed); + hprof_raw->SetName("hprof_raw"); + hprof_raw->GetYaxis()->SetRangeUser(0.96,1.04); + hprof_raw->GetYaxis()->SetTitle("mean"); + if(arg_variable == "pt") { + if(dobarrel) + hprof_raw->GetXaxis()->SetRangeUser(250,5000); + else + hprof_raw->GetXaxis()->SetRangeUser(250,2500); + hprof_raw->GetXaxis()->SetTitle("pt (GeV)"); + } + hprof_raw->GetYaxis()->SetTitleOffset(1.4); + hprof_raw->SetName("hprof_raw"); + hprof_raw->SetFillColor(kMagenta); + hprof_raw->SetFillStyle(3003); + hprof_raw->Draw("E3"); + hprof_raw->Draw("hist same p"); + + hprof_cor->SetMarkerStyle(24); + hprof_cor->SetMarkerColor(kBlue); + hprof_cor->SetLineColor(kBlue); + hprof_cor->SetName("hprof_cor"); + //hprof_cor->GetYaxis()->SetRangeUser(0.96,1.04); + hprof_cor->SetName("hprof_cor"); + hprof_cor->SetFillColor(kBlue); + hprof_cor->SetFillStyle(3003); + hprof_cor->Draw("E3 same"); + hprof_cor->Draw("hist same p"); + + //h_gaussian_cor->GetYaxis()->SetRangeUser(0.98,1.02); + //if(arg_variable == "r9") + // h_gaussian_cor->GetYaxis()->SetRangeUser(0.96,1.02); + //h_gaussian_cor->GetXaxis()->SetRangeUser(xmin,xmax); + //h_gaussian_cor->GetYaxis()->SetTitle("mean"); + //h_gaussian_cor->GetYaxis()->SetTitleOffset(1.55); + //h_gaussian_cor->GetXaxis()->SetTitle(nameXaxis); + + h_gaussian_cor->SetMarkerStyle(8); + h_gaussian_cor->SetMarkerColor(kBlue); + h_gaussian_cor->SetLineColor(kBlue); + h_gaussian_cor->SetName("h_gaussian_cor"); + h_gaussian_cor->Draw("e p same"); + + h_gaussian_raw->SetMarkerStyle(22); + h_gaussian_raw->SetMarkerColor(kRed); + h_gaussian_raw->SetLineColor(kRed); + h_gaussian_raw->SetName("h_gaussian_raw"); + h_gaussian_raw->Draw("e p same"); + + + TLegend *legend = new TLegend(0.11,0.7,0.45,0.9); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("h_gaussian_raw","raw/true CB mean","p"); + legend->AddEntry("h_gaussian_cor","cor/true CB mean","p"); + legend->AddEntry("hprof_raw","raw/true average","p"); + legend->AddEntry("hprof_cor","cor/true average","p"); + + legend->Draw("same"); + +} + diff --git a/macros/examples/scale_fitMean_RawCor_notLog.C b/macros/examples/scale_fitMean_RawCor_notLog.C new file mode 100644 index 0000000..1e08447 --- /dev/null +++ b/macros/examples/scale_fitMean_RawCor_notLog.C @@ -0,0 +1,352 @@ +#include "RooRealVar.h" +#include "RooAbsPdf.h" +#include "RooExponential.h" +#include "RooGaussian.h" +#include "RooPlot.h" +#include "TCanvas.h" +#include "RooConstVar.h" +#include "RooDataSet.h" +#include "RooHybridBDTAutoPdf.h" +#include "RooFormulaVar.h" +#include "RooProdPdf.h" +#include "RooUniform.h" +#include "TRandom.h" +#include "TGraph.h" +#include "RooAddPdf.h" +#include "RooNDKeysPdf.h" +#include "RooExtendPdf.h" +#include "RooMinimizer.h" +#include "TFile.h" +#include "TNtuple.h" +#include "HybridGBRForest.h" +#include "RooProduct.h" +#include "RooChebychev.h" +#include "RooBernstein.h" +#include "RooPolynomial.h" +#include "RooGenericPdf.h" +//#include "HZZ2L2QRooPdfs.h" +#include "RooDoubleCBFast.h" +#include "RooArgSet.h" +#include "RooArgList.h" +#include "RooCBShape.h" +#include "RooWorkspace.h" +#include "TH1D.h" +#include "TChain.h" +#include "TCut.h" +#include "TLine.h" +#include "TLegend.h" +#include "RooRandom.h" +#include "RooAddition.h" +#include "TSystem.h" +#include "RooLinearVar.h" +#include "TH2.h" +#include "TProfile.h" +#include "TStyle.h" +#include "TGaxis.h" +#include "TGraphErrors.h" + +using namespace RooFit; + +//function that fit the mean with a gaussian and plot the result for both raw/true and cor/true distributions +void fit_and_plot_mean(TString arg_variable, Double_t xmin, Double_t xmax, Int_t nbins, Double_t* xbins, Double_t step, Double_t init, TString nameXaxis, TString add_to_pngFileName, RooDataSet* hdata, RooRealVar* rawvar, RooRealVar* ecorvar, TCanvas* c_mean); + +void scale_fitMean_RawCor_notLog(bool dobarrel=true, bool weighted=false) { + + //output dir + TString dirname = "ereg_sig3_evenOddEvts_alpha15-14_endcap/"; // + gSystem->mkdir(dirname,true); + gSystem->cd(dirname); + + TCut cutUsed = "(event%2==1)"; + + //read workspace from training + TString fname; //name of the training output file + TString add_to_pngFileName, add_to_rootFileName; //extension of root and png files + + if (dobarrel) + { + fname = "wereg_ph_eb.root"; + add_to_pngFileName = "_eb.png"; + add_to_rootFileName = "_eb.root"; + } + else + { + fname = "wereg_ph_ee.root"; + add_to_pngFileName = "_ee.png"; + add_to_rootFileName = "_ee.root"; + } + add_to_rootFileName = add_to_rootFileName; //add particular info in file name + add_to_pngFileName = add_to_pngFileName; + + //Workspace + TString infile = TString::Format("./%s",fname.Data()); + TFile *fws = TFile::Open(infile); + RooWorkspace *ws = (RooWorkspace*)fws->Get("wereg"); + + //read variables from workspace + RooGBRTargetFlex *meantgt = static_cast(ws->arg("sigmeant")); + RooRealVar *tgtvar = ws->var("tgtvar"); + RooRealVar *etrue = new RooRealVar("etrue","etrue",0.); + RooRealVar *scRawEnergy = new RooRealVar("scRawEnergy","scRawEnergy",0.); + //RooRealVar *maxEnergyXtal = new RooRealVar("maxEnergyXtal","maxEnergyXtal",0.); + + RooArgList vars; + vars.add(meantgt->FuncVars()); + vars.add(*tgtvar); + vars.add(*etrue); + vars.add(*scRawEnergy); + //vars.add(*maxEnergyXtal); + + + //read testing dataset from TTree + RooRealVar weightvar("weightvar","",1.); + + TTree *dtree; + + TFile *fTree = TFile::Open("/afs/cern.ch/user/m/musella/public/forKenza/gam_gam_phys14_v5_regtraining_v3.root"); // + dtree = (TTree*)fTree->Get("promptTree"); + /*if(true_energy) { + if(!weighted) { + dtree->Draw("etrue>>h1"); + dtree->Draw("scEta>>h2","etrue<=2500"); + dtree->Draw("scEta>>h3","etrue>2500 && etrue<=3000"); + dtree->Draw("scEta>>h4","etrue>3000 && etrue<=5000"); + } + else { + dtree->Draw("etrue>>h1","weight"); + dtree->Draw("scEta>>h2","weight*(etrue<=2500)"); + dtree->Draw("scEta>>h3","weight*(etrue>2500 && etrue<=3000)"); + dtree->Draw("scEta>>h4","weight*(etrue>3000 && etrue<=5000)"); + } + } + else { + if(!weighted) { + dtree->Draw("energy>>h1","pt>250. && kSaturated[12]==1 && abs(scEta)<=1.5 && abs(ieta[12])!=1 && abs(ieta[12])!=25 && abs(ieta[12])!=26 && abs(ieta[12])!=45 && abs(ieta[12])!=46 && abs(ieta[12])!=65 && abs(ieta[12])!=66 && abs(ieta[12])!=85"); + //dtree->Draw("scEta>>h2","pt<=2000"); + //dtree->Draw("scEta>>h3","pt>2000 && pt<=3000"); + //dtree->Draw("scEta>>h4","pt>3000 && pt<=5000"); + } + else { + dtree->Draw("pt>>h1","weight"); + dtree->Draw("scEta>>h2","weight*(pt<=2500)"); + dtree->Draw("scEta>>h3","weight*(pt>2500 && pt<=3000)"); + dtree->Draw("scEta>>h4","weight*(pt>3000 && pt<=5000)"); + } + }*/ + //dtree->Draw("etrue>>h5","weight*(pt<=2000)"); + //dtree->Draw("etrue>>h6","weight*(pt>2000 && pt<=3500)"); + //dtree->Draw("etrue>>h7","weight*(pt>3500 && pt<=5000)"); + //selection cuts for testing + TCut selcut; + + if (dobarrel) + selcut = "pt>250. && kSaturated[12]!=1 && abs(scEta)<1.5"; + else + selcut = "pt>250. && kSaturated[12]!=1 && abs(scEta)>1.5"; + + + TCut selweight; + if(weighted) + selweight= "(weight)"; + else + selweight= "(1.)"; + + + //weightvar.SetTitle(cutUsed*selcut); + weightvar.SetTitle(cutUsed*selcut*selweight); + + //create the testing dataset + RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",dtree,vars,weightvar); + + //retrieve full pdf from workspace + //RooAbsPdf *sigpdf = ws->pdf("sigpdf"); + + //regressed output functions + RooAbsReal *sigmeanlim = ws->function("sigmeanlim"); + //RooAbsReal *sigwidthlim = ws->function("sigwidthlim"); + + + RooRealVar *pt; + RooRealVar *scetavar = ws->var("var_1"); + scetavar->setRange(-1.5,1.5); + + if(!dobarrel) { + RooRealVar *preshowerEnergy = ws->var("var_28"); + //formula for Pt corrected_energy/Cosh(eta) = ecorvar*tgtvar*rawvar/cosh(eta) + RooFormulaVar ptFormula("pt","","@0*(1+@1)*1./(cosh(@2))",RooArgList(*scRawEnergy,*preshowerEnergy,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(250.,5000); // + } + else { + RooFormulaVar ptFormula("pt","","@0*1./(cosh(@1))",RooArgList(*etrue,*scetavar)); + pt = (RooRealVar*)hdata->addColumn(ptFormula); + pt->setRange(250.,5000); // + } + + + //create xbins that contains the fit slices limits + Int_t nbins=10; + Double_t *xbins=0, step, init=250; + + if (dobarrel) + step = 500; + else + step = 225; + + xbins = (Double_t*)malloc(sizeof(Double_t)*(nbins+1)); + + for(int ii=0;ii<=nbins; ii++) { + xbins[ii]=init+step*ii; + } + + + //formula for corrected energy/true energy ( 1.0/(etrue/eraw) * regression mean) + RooFormulaVar ecor("ecor","","1./(@0)*(@1)",RooArgList(*tgtvar,*sigmeanlim)); + RooRealVar *ecorvar = (RooRealVar*)hdata->addColumn(ecor); + ecorvar->setRange(0.6,1.2); + ecorvar->setBins(800); + + //formula for raw energy/true energy + RooFormulaVar raw("raw","","1./(@0)",RooArgList(*tgtvar)); + RooRealVar *rawvar = (RooRealVar*)hdata->addColumn(raw); + rawvar->setRange(0.6,1.2); + rawvar->setBins(800); + + TCanvas *c_mean = new TCanvas("c_mean","",800,800); + //c_mean->Divide(1,1); + //fit_and_plot_mean("etrue",0.,5000.,nbins, xbins, step, init, "photon true energy (GeV)", add_to_pngFileName, hdata, rawvar,ecorvar, c_mean); + //c_mean->SaveAs("scale_vs_etrue.png"); + + fit_and_plot_mean("pt",0.,5000.,nbins, xbins, step, init, "pT (GeV)", add_to_pngFileName, hdata, rawvar,ecorvar, c_mean); + c_mean->SaveAs("scale_vs_pt.png"); +} +void fit_and_plot_mean(TString arg_variable, Double_t xmin, Double_t xmax, Int_t nbins, Double_t* xbins, Double_t step, Double_t init, TString nameXaxis, TString add_to_pngFileName, RooDataSet* hdata, RooRealVar* rawvar, RooRealVar* ecorvar, TCanvas* c_mean) +{ + + TString str1, str2, str3, str4, variable, str; + TH1F* h_gaussian_raw = new TH1F("h_gaussian_raw","",nbins,xbins); + TH1F* h_gaussian_cor = new TH1F("h_gaussian_cor","",nbins,xbins); + + TCanvas *craw = new TCanvas("craw","craw"); //------------------------------------------------------------CANVAS + craw->Divide(5,2); + TCanvas *ccor = new TCanvas("ccor","ccor"); //------------------------------------------------------------CANVAS + ccor->Divide(5,2); + + for(Int_t i=0; i"+str4+"+("+str3+"*"+str1+") && "+variable+"<"+str4+"+("+str3+"*"+str2+") "; + + hdata_reduced = (RooDataSet*)hdata->reduce(str); + + RooDataSet *hdata2 = (RooDataSet*)hdata_reduced->reduce(*ecorvar); + RooRealVar mean_cor("mean_cor","mean_cor",1,0.9,1.1); + RooRealVar sig_cor("sig_cor","sig_cor",0.01,0.0002,0.8); + RooRealVar a1_cor("a1_cor","a1_cor",3,0.05,10); + RooRealVar a2_cor("a2_cor","a2_cor",3,0.05,10); + RooRealVar n1_cor("n1_cor","n1_cor",3,1.01,500); + RooRealVar n2_cor("n2_cor","n2_cor",3,1.01,500); + + RooDoubleCBFast pdfCB_cor("pdfCB_cor","pdfCB_cor",*ecorvar,mean_cor,sig_cor,a1_cor,n1_cor,a2_cor,n2_cor); + pdfCB_cor.fitTo(*hdata2,Range(0.9,1.1)); + h_gaussian_cor->AddBinContent(i+1,mean_cor.getVal()); + h_gaussian_cor->SetBinError(i+1,mean_cor.getError()); + + RooDataSet *hdata3 = (RooDataSet*)hdata_reduced->reduce(*rawvar); + RooRealVar mean_raw("mean_raw","mean_raw",1.,0.9,1.1); + RooRealVar sig_raw("sig_raw","sig_raw",0.01,0.0002,0.8); + RooRealVar a1_raw("a1_raw","a1_raw",3,0.05,10); + RooRealVar a2_raw("a2_raw","a2_raw",3,0.05,10); + RooRealVar n1_raw("n1_raw","n1_raw",3,1.01,500); + RooRealVar n2_raw("n2_raw","n2_raw",3,1.01,500); + RooDoubleCBFast pdfCB_raw("pdfCB_raw","pdfCB_raw",*rawvar,mean_raw,sig_raw,a1_raw,n1_raw,a2_raw,n2_raw); + pdfCB_raw.fitTo(*hdata3,Range(0.9,1.1)); + + h_gaussian_raw->AddBinContent(i+1,mean_raw.getVal()); + h_gaussian_raw->SetBinError(i+1,mean_raw.getError()); + + + //----------------------------------------------------------------------------------- + ccor->cd(i+1); + + RooPlot *plot = ecorvar->frame(0.9,1.1, 250); + plot->SetTitle("Distribution of cor/true "+str); + plot->GetXaxis()->SetTitle("cor/true"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata_reduced->plotOn(plot,Name("MC_sample_cor")); + pdfCB_cor.plotOn(plot,Name("corrected"),LineColor(kRed)); + plot->Draw(); + TLegend *legend = new TLegend(0.8,0.8,0.9,0.9); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("MC_sample_cor","MC Sample cor","P"); + legend->AddEntry("corrected","fit","l"); + legend->Draw(); + + craw->cd(i+1); + + //RooPlot *plot3 = rawvar->frame(0.15,0.4, 250); + RooPlot *plot3 = rawvar->frame(0.9,1.1, 250); + plot3->SetTitle("Distribution of raw/true "+str); + plot3->GetXaxis()->SetTitle("raw/true"); + gPad->SetGridx(); + gPad->SetGridy(); + hdata_reduced->plotOn(plot3,Name("MC_sample_raw")); + pdfCB_raw.plotOn(plot3,Name("raw"),LineColor(kRed)); + plot3->Draw(); + TLegend *legend2 = new TLegend(0.8,0.8,0.9,0.9); + legend2->SetFillColor(kWhite); + legend2->SetLineColor(kWhite); + legend2->AddEntry("MC_sample_raw","MC Sample raw","P"); + legend2->AddEntry("cfit_raw","fit","l"); + legend2->Draw(); + + + + + } + craw->SaveAs("scale_vs_"+arg_variable+"_fit_raw"+add_to_pngFileName); + ccor->SaveAs("scale_vs_"+arg_variable+"_fit_cor"+add_to_pngFileName); + + c_mean->cd(); + gPad->SetGridx(); + gPad->SetGridy(); + gStyle->SetOptStat(0); + + h_gaussian_cor->GetYaxis()->SetRangeUser(0.97,1.02); + h_gaussian_cor->GetXaxis()->SetRangeUser(xmin,xmax); + h_gaussian_cor->GetYaxis()->SetTitle("mean"); + h_gaussian_cor->GetYaxis()->SetTitleOffset(1.55); + h_gaussian_cor->GetXaxis()->SetTitle(nameXaxis); + + h_gaussian_cor->SetMarkerStyle(22); + h_gaussian_cor->SetMarkerColor(kBlue); + h_gaussian_cor->SetLineColor(kBlue); + h_gaussian_cor->SetName("h_gaussian_cor"); + h_gaussian_cor->Draw("e p"); + + h_gaussian_raw->SetMarkerStyle(20); + h_gaussian_raw->SetMarkerColor(kRed); + h_gaussian_raw->SetLineColor(kRed); + h_gaussian_raw->SetName("h_gaussian_raw"); + h_gaussian_raw->Draw("e same"); + + TLegend *legend = new TLegend(0.11,0.8,0.4,0.89); + legend->SetFillColor(kWhite); + legend->SetLineColor(kWhite); + legend->AddEntry("h_gaussian_raw","raw/true CB mean","p"); + legend->AddEntry("h_gaussian_cor","cor/true CB mean","p"); + + legend->Draw("same"); + +} +